Назад к вопросам
Middle
134
questionbank

Как работает маршрутизация (Routing) в ASP.NET?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Маршрутизация в ASP.NET сопоставляет входящие HTTP-запросы с исполняемым кодом (обработчиками, например, методами контроллеров или Razor Pages). Она определяет, какой код должен быть выполнен в ответ на конкретный URL.

Основные компоненты и концепции:

  1. Шаблон маршрута (Route Template): Определяет структуру URL, которую маршрутизатор должен сопоставить. Может включать литералы и параметры.

    // Пример шаблона маршрута
    "{controller=Home}/{action=Index}/{id?}" 
    
    • Литералы (Home, Index) - статические части URL.
    • Параметры (controller, action, id) - переменные части URL, заключенные в фигурные скобки.
    • Опциональные параметры (id?) - могут присутствовать или отсутствовать в URL.
  2. Ограничения маршрута (Route Constraints): Определяют правила для значений параметров маршрута (например, тип данных, регулярное выражение).

    // Пример ограничения на параметр id
    "{controller}/{action}/{id:int}" // id должен быть целым числом
    
  3. Значения по умолчанию (Default Values): Присваивают значения параметрам маршрута, если они не указаны в URL.

  4. Порядок маршрутов (Route Order): Маршрутизатор проверяет маршруты в порядке их добавления. Первый совпавший маршрут обрабатывает запрос. Более специфичные маршруты должны быть определены перед более общими.

  5. Генерация URL (URL Generation): Маршрутизация также используется для создания URL-адресов на основе шаблонов маршрутов и предоставленных значений параметров.

В ASP.NET Core маршрутизация конфигурируется в методе Configure класса Startup (или в Program.cs).

Пример конфигурации маршрутизации:

// В Startup.cs или Program.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // ...другой middleware

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute( // Для MVC контроллеров
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");

        endpoints.MapRazorPages(); // Для Razor Pages

        // Можно добавить другие маршруты
        // endpoints.MapGet("/hello", async context => await context.Response.WriteAsync("Hello World!"));
    });

    // ...другой middleware
}

Как происходит сопоставление:

  1. Входящий HTTP-запрос поступает в конвейер обработки запросов ASP.NET Core.
  2. Компонент UseRouting() добавляет middleware маршрутизации в конвейер.
  3. Middleware маршрутизации анализирует URL запроса.
  4. Он перебирает зарегистрированные маршруты по порядку.
  5. Если URL запроса соответствует шаблону маршрута и удовлетворяет ограничениям, маршрутизатор определяет соответствующий обработчик (например, метод действия контроллера).
  6. Найденный обработчик (Endpoint) сохраняется в контексте запроса.
  7. Компонент UseEndpoints() выполняет Endpoint, найденный маршрутизатором. Для MVC это приводит к выполнению соответствующего метода действия контроллера.

Таким образом, маршрутизация является центральным механизмом, связывающим URL запросов с исполняемым кодом вашего приложения.