gpt4 book ai didi

c# - 静态文件中间件应该在 ASP.NET Core 管道中的什么位置?

转载 作者:太空狗 更新时间:2023-10-29 23:28:35 24 4
gpt4 key购买 nike

我正在使用 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 中间件。

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

附言我想你有这样的“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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com