Маршрутизация в 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-запросами и связывать их с действиями контроллеров или страницами. Понимание основных принципов настройки маршрутов поможет создавать более масштабируемые и удобные для пользователя приложения.