编程语言
首页 > 编程语言> > c# – 静态文件中间件应该在ASP.NET Core管道中的哪个位置?

c# – 静态文件中间件应该在ASP.NET Core管道中的哪个位置?

作者:互联网

我正在使用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与任何路由都不匹配,然后运行我的ErrorController并为该请求发出404.

所以:

>这是管道的正确顺序吗?
>有没有办法避免这一切,还是设计?例如一些“更轻”的过程触发404而不经历所有这些?就像可能首先使用静态文件中间件(不确定这是否明智/安全)?

解决方法:

is this the correct order for the pipeline?

是的.

However when I turn on debug level logging, I notice that if a static file is missing, it runs through Microsoft.AspNetCore.Builder.RouterMiddleware and says Request did not match any routes, then runs my ErrorController and issues a 404 for that request. Why?

首先,您丢失的静态文件请求将通过异常处理程序,HSTS,HTTPS重定向和StatusCodePagesWithReExecute中间件,但让我们忽略它们,因为没有什么有趣的.请求只是通过它们.

然后,它由静态文件中间件处理.中间件很快就会理解,该文件丢失了,只是让你的请求运行到下一个中​​间件,即MVC middlware.

MVC中间件查看其路由表并找到“catchAll”路由并让ErrorController处理请求.这就是ErrorController处理丢失文件的原因.

附:我想你有“catchAll”这样的路线:

app.UseMvc(routes =>
        {
            .... // your routes here

            routes.MapRoute("catchAll", "{*.}", new { controller = "Error", action = "Error404" }
        });

标签:c,asp-net-core,asp-net-core-2-1
来源: https://codeday.me/bug/20190627/1304010.html