ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-06-27 10:55:15  阅读:187  来源: 互联网

标签:c asp-net-core asp-net-core-2-1


我正在使用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有