Маршрутизация в ASP.NET Core C# — это процесс сопоставления URL-запросов с определенными обработчиками запросов (действиями контроллеров или страницами). Это ключевая часть работы веб-приложений, так как она определяет, какой код будет выполнен в ответ на тот или иной запрос. В этой статье рассмотрены основы маршрутизации, различные типы маршрутов и примеры их использования.
Основы маршрутизации
Маршрутизация в ASP.NET Core осуществляется через middleware, который анализирует входящие запросы и направляет их на соответствующие контроллеры или страницы Razor. В процессе маршрутизации учитываются различные параметры URL, такие как сегменты пути, параметры запроса и другие.
Процесс маршрутизации происходит в два этапа:
- Определение маршрута — конфигурация маршрутов в приложении.
- Обработка маршрута — соответствующий обработчик запроса (например, метод контроллера) выполняет необходимую логику.
Настройка маршрутизации в 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-запросами и связывать их с действиями контроллеров или страницами. Понимание основных принципов настройки маршрутов поможет создавать более масштабируемые и удобные для пользователя приложения.