gpt4 book ai didi

.net - 为什么NET Core 2.0中UseAuthentication必须在UseMvc之前

转载 作者:行者123 更新时间:2023-12-02 07:43:49 25 4
gpt4 key购买 nike

在 NET Core 2.0 中,当我有:

app.UseAuthentication();
app.UseMvc();

我的应用程序可以正确处理 JWT 授权 header ,但是当以上行的顺序不同时

app.UseMvc();
app.UseAuthentication();

魔法可能会发生。就像第一个请求一样,一切都很好,但是第二个,收到了 401 响应(这种行为是最有趣的)。

那么问题是为什么这两个中间件的顺序会产生如此奇怪的影响呢? 我理解正确的顺序,但我不理解第一个请求中的奇怪行为

最佳答案

因为在 Configure 方法中声明中间件的顺序实际上很重要。中间件定义请求将经过的管道。最简单的中间件可以这样定义

app.Use(async (context, next) =>
{
await next.Invoke();
});

在此示例中,next.Invoke() 之前的代码将在请求传递到链中的下一个中间件之前执行。当所有后续中间件执行完毕后,它之后的所有内容都会被执行。现在,针对您的问题,身份验证中间件是在 MVC 之前定义的,因为通过这种方式,身份验证中间件可以停止请求,如果无法通过身份验证,则返回 HTTP 状态 403,或者返回 HTTP 状态 302,以将请求重定向到登录页面。

对于您的具体情况,第一个请求很可能与配置的路由匹配,因此请求由 MVC Controller 处理并生成响应,而不将其传递到下一个(身份验证)中间件。对于第二个请求(我猜它是不同的),MVC 框架没有找到与该请求匹配的路由器,因此它只是将其转发到下一个中​​间件,希望它知道如何处理它。

另一个原因是第一个请求命中不需要请求授权的操作,而另一个请求命中需要授权的操作。

关于.net - 为什么NET Core 2.0中UseAuthentication必须在UseMvc之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49276987/

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