微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

在NET Core 2.0中我有

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

我的应用程序正确处理JWT授权标题,但当上面的行以不同的顺序

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

魔法可以发生.喜欢第一个请求,一切都很好,但第二个,收到401响应(这种行为是最有趣的).

所以问题是为什么这两个中间件的顺序有这么奇怪的影响?我理解正确的顺序,但我不理解第一次请求中的奇怪行为

解决方法

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐