это правильный порядок для конвейера?
Да, это так.
Однако, когда я включаю ведение журнала уровня отладки, я замечаю, что если статический файл отсутствует, он проходит через Microsoft.AspNetCore.Builder.RouterMiddleware
и говорит Request did not match any routes
, затем запускает мой ErrorController и выдает 404 для этого запроса. Почему?
Во-первых, ваш отсутствующий статический запрос файла проходит через обработчик исключений, HSTS, перенаправление HTTPS и промежуточное ПО StatusCodePagesWithReExecute, но давайте их проигнорируем, потому что ничего интересного нет. Запрос просто проходит через них.
Затем он обрабатывается промежуточным ПО статических файлов. Промежуточное ПО вскоре понимает, что этот файл отсутствует, и просто позволяет вашему запросу выполнить следующее промежуточное ПО , которое является промежуточным ПО MVC.
Промежуточное программное обеспечение MVC просматривает таблицу маршрутов и находит маршрут "catchAll" и позволяет ErrorController
обрабатывать запрос. Именно поэтому пропущенные файлы обрабатываются ErrorController
.
P.S. Я полагаю, у вас есть маршрут "catchAll" примерно так:
app.UseMvc(routes =>
{
.... // your routes here
routes.MapRoute("catchAll", "{*.}", new { controller = "Error", action = "Error404" }
});