пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Определение маршрутов. Работа с маршрутами. Генерация исходящих адресов URL. Области (Areas). Создание собственного обработчика маршрутов.

Определение маршрутов. Работа с маршрутами.

Установкой маршрутов занимается статический метод RegisterRoutes. Вызывается этот метод файле Global.asax в методе Application_Start:

protected void Application_Start()

    RouteConfig.RegisterRoutes(RouteTable.Routes);

    …

}

Все определения маршрутов находятся в файле RouteConfig.cs

  public class RouteConfig

    {

        public static void RegisterRoutes(RouteCollection routes)

        {

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

 

            routes.MapRoute(

                name: "Default",

                url: "{controller}/{action}/{id}",

                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

            );

        }

Далее идет собственно определение маршрута по умолчанию. Метод routes.MapRoute выполняет сопоставление маршрута запросу. В перегруженных версиях данного метода мы можем задать дополнительные параметры сопоставления.

 

Разберем параметры метода. Вначале с помощью свойства name задается имя маршрута - Default. Второй параметр - url задает шаблон строки запроса или шаблон Url, с которым будет сопоставляться данный маршрут.

 

Шаблон URL включает в себя несколько сегментов, которые заключены в фигурные скобки. В данном случае сегмент представляет часть запроса, которая находится между слешами. Каждый такой сегмент шаблона содержит параметр. Эти параметры называются параметрами URL. В данном случае это параметры controller, action и id. Но вообще параметры могут иметь различные имена, включающие любые алфавитно-цифровые символы.

Третий параметр метода routes.MapRoute - defaults определяет значения по умолчанию для маршрута.

defaults: new { controller = "Book", action = "Show", id = UrlParameter.Optional }

Последний параметр объявлен как необязательный id = UrlParameter.Optional, поэтому, если он не указан в строке запроса, он не будет учитываться

Генерация исходящих адресов URL.

Наиболее простой способ вывода адреса является использование анкора - элемента a:

 

<a href="Home/Index/3" />

Но также мы можем использовать специальные хелперы рендеринга - Html.ActionLink и Html.RouteLink

Html.ActionLink

Хелпер ActionLink создает гиперссылку на действие контроллера. Если мы создаем ссылку на действие, определенное в том же контроллере, то можем просто указать имя действия:

@Html.ActionLink("Жми здесь", "Имя_Метода",”Имя_контроллера”)

Что создаст вам следующую разметку:

<a href="/ Имя_контроллера / Имя_Метода ">Жми здесь</a>

Html.RouteLink

Хелпер RouteLink использует похожий шаблон, что и ActionLink: он принимает имя маршрута, но не требует аргументов для имени контроллера и имени действия. Так, первый пример с ActionLink эквивалентен следующему коду:

@Html.RouteLink("Все книги", new { controller = "Book", action = "Index", author = "Толстой", id = 10 }, new { id = "Tolstoi", @class = "link" })

Чтобы использовать маршрут, нам просто надо указать имя определенного нами маршрута и затем определить при необходимости дополнительные параметры. Например, возьмем стандартный маршрут Default:

routes.MapRoute(

         name: "Default",

         url: "{controller}/{action}/{id}",

         defaults: new { controller = "Home", action = "Index", id=RouteParameter.Optional } }

     );

 

 

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

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

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

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

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

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

Пример:

Итак, сначала создадим сам обработчик.

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("Инопланетное послание : Привет мир!");

        }

    }

}

Теперь в классе 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);

    }

}

 

 

 

 


12.01.2019; 19:53
хиты: 118
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь