Создание собственного обработчика маршрутов

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 31.10.2015

Пред тем как приступить к созданию собственного обработчика маршрутов, посмотрим, что в целом представляет собой процесс маршрутизации.

Процесс маршрутизации состоит из следующих этапов:

  1. Модуль UrlRoutingModule пытается сопоставить текущий запрос с маршрутами в таблице RouteTable.

  2. Если сопоставление завершилось удачно, то модуль маршрутизации выбирает обработчик маршрутов сопоставленного маршрута - объект IRouteHandler.

  3. Затем у объекта IRouteHandler вызывается метод GetHandler, который возвращает объект IHttpHandler, используемый для обработки запроса.

  4. У обработчика IHttpHandler вызывается метод ProcessRequest для обработки запросов.

По умолчанию обработчик запросов или объект IRouteHandler представляет экземпляр класса MvcRouteHandler, который возвращает объект MvcHandler, применяющий интерфейс IHttpHandler. Этот объект MvcHandler отвечает за инициализацию контроллера, который потом уже вызывает одно из своих действий.

Однако мы можем переопределить это поведение, указав при определении маршрута свой обработчик маршрутов. Итак, сначала создадим сам обработчик. Для обработчика создадим какую-нибудь специальную папку в проекте и добавим в нее новый класс. Назовем его MyRouteHandler:

using System.Web;
using System.Web.Routing;

namespace Routing.RouteHandlers
{
    public class MyRouteHandler : IRouteHandler
    {
        public IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            return new MyHttpHandler();
        }
    }

    public class MyHttpHandler : IHttpHandler
    {
        public bool IsReusable
        {
            get { return false; }
        }

        public void ProcessRequest(HttpContext context)
        {
            context.Response.Write("Инопланетное послание : Привет мир!");
        }
    }
}

Как было уже сказано про этапы маршрутизации, нам нужно собственно два класса: класс, реализующий интерфейс IHttpHandler, который и будет обрабатывать запрос; и класс, реализующий интерфейс IRouteHandler, который сопоставляется с маршрутом, и вызывает первый класс.

Теперь в классе RouteConfig пропишем маршрут, который будет обрабатываться нашим обработчиком, не забывая при этом импортировать пространство имен, в котором объявлен наш обработчик:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

		Route newRoute = new Route("{controller}/{action}", new MyRouteHandler());
        routes.Add(newRoute);
    }
}

Теперь мы можем адресовать нашему приложению соответствующий запрос, например, Home/Index и браузер выведет нам нашу строку с посланием.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850