Как работает маршрутизация (Routing) в ASP.NET?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Маршрутизация в ASP.NET сопоставляет входящие HTTP-запросы с исполняемым кодом (обработчиками, например, методами контроллеров или Razor Pages). Она определяет, какой код должен быть выполнен в ответ на конкретный URL.
Основные компоненты и концепции:
-
Шаблон маршрута (Route Template): Определяет структуру URL, которую маршрутизатор должен сопоставить. Может включать литералы и параметры.
// Пример шаблона маршрута "{controller=Home}/{action=Index}/{id?}"- Литералы (
Home,Index) - статические части URL. - Параметры (
controller,action,id) - переменные части URL, заключенные в фигурные скобки. - Опциональные параметры (
id?) - могут присутствовать или отсутствовать в URL.
- Литералы (
-
Ограничения маршрута (Route Constraints): Определяют правила для значений параметров маршрута (например, тип данных, регулярное выражение).
// Пример ограничения на параметр id "{controller}/{action}/{id:int}" // id должен быть целым числом -
Значения по умолчанию (Default Values): Присваивают значения параметрам маршрута, если они не указаны в URL.
-
Порядок маршрутов (Route Order): Маршрутизатор проверяет маршруты в порядке их добавления. Первый совпавший маршрут обрабатывает запрос. Более специфичные маршруты должны быть определены перед более общими.
-
Генерация 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
}
Как происходит сопоставление:
- Входящий HTTP-запрос поступает в конвейер обработки запросов ASP.NET Core.
- Компонент
UseRouting()добавляет middleware маршрутизации в конвейер. - Middleware маршрутизации анализирует URL запроса.
- Он перебирает зарегистрированные маршруты по порядку.
- Если URL запроса соответствует шаблону маршрута и удовлетворяет ограничениям, маршрутизатор определяет соответствующий обработчик (например, метод действия контроллера).
- Найденный обработчик (Endpoint) сохраняется в контексте запроса.
- Компонент
UseEndpoints()выполняет Endpoint, найденный маршрутизатором. Для MVC это приводит к выполнению соответствующего метода действия контроллера.
Таким образом, маршрутизация является центральным механизмом, связывающим URL запросов с исполняемым кодом вашего приложения.