The endpoint for requests coming through ASP.NET is always a class implementing IHttpHandler. IHttpHandler has very little surface area. You simply override the IsReusable property and the ProcessRequest method. ProcessRequest can pretty much do anything you want it to. The example in this tutorial included a handler that manages rendering a form and handling input.
For a custom handler assembly to work, it must be mapped to a file path or extension in the application's Web.Config file. The extension must also be mapped within the IIS metabase.
ASP.NET also supports handlers that may be compiled just-in-time. Simple handlers are easy to create and deploy because you don't need to modify the Web.Config file, nor do you need to modify the IIS metabase.
Tutorial 18 Quick Reference
How to create a custom handler assembly
Create a new class implementing IHttpHandler
Override the IsReusable property
Override ProcessRequest
How to assign a file mapping to the handler in ASP.NET
Mention the handler in the <httpHandler> node of the application's Web.Config file
How to assign a file mapping to the handler in IIS
Right-click on the virtual directory
Select Properties
Click the Configure button
Click the Add button
Add a new extension and map it to aspnet_isapi.dll
How to create a simple handler
Select Web site | Add New Item
Select Generic Handler from the templates
Insert your own code for responding to the request