Маршрутизация в ASP.NET Core C#

Маршрутизация в ASP.NET Core C# — это процесс сопоставления URL-запросов с определенными обработчиками запросов (действиями контроллеров или страницами). Это ключевая часть работы веб-приложений, так как она определяет, какой код будет выполнен в ответ на тот или иной запрос. В этой статье рассмотрены основы маршрутизации, различные типы маршрутов и примеры их использования.

Основы маршрутизации

Маршрутизация в ASP.NET Core осуществляется через middleware, который анализирует входящие запросы и направляет их на соответствующие контроллеры или страницы Razor. В процессе маршрутизации учитываются различные параметры URL, такие как сегменты пути, параметры запроса и другие.

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

  1. Определение маршрута — конфигурация маршрутов в приложении.
  2. Обработка маршрута — соответствующий обработчик запроса (например, метод контроллера) выполняет необходимую логику.

Настройка маршрутизации в Startup.cs

Для настройки маршрутизации в ASP.NET Core необходимо использовать методы, предоставленные в Startup.cs. В классе Startup в методе Configure нужно вызвать метод UseRouting, а затем указать, как обрабатывать маршруты с помощью UseEndpoints.

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

public void Configure(IApplicationBuilder app)
{
    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

В этом примере маршрут определяет, что по умолчанию контроллером будет Home, а действием — Index. Параметр id является необязательным.

Маршруты с параметрами

Маршруты могут содержать параметры, которые захватываются из URL. Параметры могут быть обязательными или необязательными. Обязательные параметры указываются через {parameter}, а необязательные — через {parameter?}.

Пример маршрута с параметром:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "product",
        pattern: "product/{id}",
        defaults: new { controller = "Product", action = "Details" });
});

В данном примере URL вида product/123 будет сопоставлен с методом Details контроллера Product, где id примет значение 123.

Использование атрибутов маршрутизации

Вместо глобальной конфигурации маршрутов в Startup.cs можно использовать атрибуты маршрутизации прямо в контроллерах и действиях. Это позволяет более гибко настраивать маршруты для конкретных методов.

Пример использования атрибутов маршрутизации:

[Route("product")]
public class ProductController : Controller
{
    [Route("{id}")]
    public IActionResult Details(int id)
    {
        // Логика для получения товара по id
        return View();
    }
}

В данном примере метод Details будет обрабатывать запросы по маршруту product/{id}, где id — это параметр, передаваемый в метод.

Конфигурация маршрутов с использованием шаблонов

Маршруты могут быть настроены с использованием шаблонов, чтобы гибко определять, как будет строиться URL. В шаблонах можно использовать как статические сегменты, так и динамические части.

Пример маршрута с шаблонами:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "blog",
        pattern: "blog/{year}/{month}/{slug}",
        defaults: new { controller = "Blog", action = "Post" });
});

В этом примере маршрут соответствует URL вида blog/2025/03/asp-net-core-routing, где year, month и slug будут переданы в метод Post контроллера Blog как параметры.

Конфигурация маршрутов с несколькими действиями

Для маршрутов с несколькими действиями контроллер может иметь несколько маршрутов для одного действия. Это позволяет обрабатывать различные типы запросов с использованием одинакового метода.

Пример маршрутов для одного действия:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "home",
        pattern: "{controller=Home}/{action=Index}");
    endpoints.MapControllerRoute(
        name: "about",
        pattern: "about-us",
        defaults: new { controller = "Home", action = "About" });
});

В этом примере HomeController имеет два маршрута — один по умолчанию для действия Index и другой для действия About.

Обработка статических файлов

Маршрутизация в ASP.NET Core также может быть настроена для обработки статических файлов (например, изображений, CSS или JavaScript). Для этого используется middleware UseStaticFiles.

Пример настройки статических файлов:

public void Configure(IApplicationBuilder app)
{
    app.UseStaticFiles();
    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

Когда это middleware активировано, ASP.NET Core будет обслуживать файлы из каталога wwwroot по запросам, соответствующим их имени.


Маршрутизация является важной частью создания веб-приложений на ASP.NET Core. Она позволяет эффективно управлять URL-запросами и связывать их с действиями контроллеров или страницами. Понимание основных принципов настройки маршрутов поможет создавать более масштабируемые и удобные для пользователя приложения.