Ещё один пример обработчика маршрута или единственный обработчик HTTP-данных на несколько маршрутов в приложении ASP.NET

В очередной раз был подобный вопрос на форумах, а поскольку данный вопрос попадается мне не в первый раз, то я решил написать эту статью. Хотя назвать статьей не особо язык поворачивается. Всё реализуется достаточно просто, если хорошо представлять себе механизм обработки запросов в ASP.NET. Можно конечно напридумать много разных способов с использованием модулей перезаписи путей и прочего, но раз есть такая мощная система как маршрутизация, то будет грех её не использовать. Сначала нужно зарегистрировать наш маршрут.
public class Global : System.Web.HttpApplication
{

  protected void Application_Start(object sender, EventArgs e)
  {
    RouteTable.Routes.Add(new Route("Some/{*extrainfo}", new MyRouteHandler()));
  }
}
Маршруты начинающиеся с Some будут передаваться обработчику маршрутов MyHandler. Его определяем мы.
namespace TestHttpHandler
{
  public class MyRouteHandler : IRouteHandler
  {
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
      return new MyHttpHandler();
    }
  }
}
А сам обработчик маршрутов сопоставит их обработчику HTTP-данных, который и является конечной точкой обработки запросов.
namespace TestHttpHandler
{
  /// <summary>
  /// Summary description for MyHttpHandler
  /// </summary>
  public class MyHttpHandler : IHttpHandler
  {

    public void ProcessRequest(HttpContext context)
    {
      context.Response.ContentType = "text/plain";
      context.Response.Write("Hello World");
    }

    public bool IsReusable
    {
      get
      {
        return false;
      }
    }
  }
}
В данном примере я использовал готовый обработчик ashx предлагаемый студией, но им может быть любой класс при условии, что он реализует интерфейс IHttpHandler. Теперь все маршруты подобные этим
/Some
/Some/Some
/Some/Some/Some
будут обработаны только нашим обработчиком HTTP-данных. Как видно всё очень просто.