我正在使用ASP.NET Core 2.1。我认为静态文件中间件应该先于mvc中间件-无需通过mvc运行请求即可仅提供css
文件。
因此,我按以下顺序排列它们:
app.UseExceptionHandler(/*...*/)
app.UseHsts();
app.UseHttpsRedirection();
app.UseStatusCodePagesWithReExecute(/*...*/);
// and lastly:
app.UseStaticFiles();
app.UseMvc(/*...*/);
但是,当我打开调试级别日志记录时,我注意到如果缺少静态文件,它将通过
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" }
});
关于c# - 静态文件中间件应在ASP.NET Core管道中的什么位置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51208070/