Маршрутизация в ASP.NET Core¶
Начиная с версии 3.0, в ASP.NET Core используется маршрутизация конечных точек.
Использование маршрутизации конечных точек в ASP.NET Core¶
Маршрутизация конечных точек реализуется с помощью двух компонентов:
EndpointMiddlewareдля регистрации конечных точек в системе маршрутизации;EndpointRoutingMiddlewareвыбирает, какая из конечных точек, зарегистрированныхEndpointMiddleware, должна выполняться для данного запроса. Чтобы легче их различать, будем называть егоRoutingMiddleware.
Чтобы зарегистрировать конечные точки, вызовите метод UseEndpoints() в методе Configure() файла Startup.cs:
public void Configure(IApplicationBuilder app)
{
app.UseRouting(); //1
app.UseEndpoints(endpoints => //2
{
endpoints.MapRazorPages(); //3
endpoints.MapHealthChecks("/healthz"); //4
endpoints.MapGet("/test", async context => //5
{
await context.Response.WriteAsync("Hello, World!");
});
});
}
Здесь:
- добавляем компонент
EndpointRoutingMiddlewareв конвейер; - добавляем компонент
EndpointMiddlewareв конвейер и определяем конфигурацию; - регистрируем все страницы Razor;
- регистрируем конечную точку проверки работоспособности на маршруте
/healthz; - регистрируем простую конечную точку, возвращающую “Hello, World!” на маршруте
/test
Каждая конечная точка связана с шаблоном маршрута, который определяет, с какими URL-адресами конечная точка должна совпасть.
EndpointMiddleware хранит зарегистрированные маршруты в словаре, который используется RoutingMiddleware для поиска подходящих конечных точек. Если такая точка находится, указание на нее прикрепляется к объекту HttpContext. Когда запрос доходит до EndpointMiddleware, компонент выполняет выбранную точку.
Если RoutingMiddleware не находит подходящий запросу шаблон, конечная точка не выбирается, запрос передается дальше по конвейеру. EndpointMiddleware игнорирует такой запрос, и, если компонентов после EndpointMiddleware нет, выполняется фиктивный компонент и возвращается ответ 404 Not Found.

Видно преимущество разделения RoutingMiddleware и EndpointMiddleware: все компоненты, размещенные после RoutingMiddleware, могут видеть, какая конечная точка будет выполнена. Это полезно, например, при использовании компонента AuthorizationMiddleware, которому необходимо знать выбранную конечную точку для проверки прав доступа.
Маршрутизация на основе соглашений и маршрутизация на основе атрибутов¶
Маршрутизация и страницы Razor¶
Дата создания : 22 сентября 2022 г.