【发布时间】:2015-08-05 08:06:57
【问题描述】:
在 ASP.Net/ASP.Net Core WebAPI 中,
当客户端/浏览器尝试访问带有 [Authorized] 属性的 WebAPI 端点时。它会获得一个 302-Found 状态码,其中包含对登录页面的重定向响应,而不是针对未经授权的请求的 401-Unauthorized。
注意:我注意到 AuthorizeAttribute 过滤器中的 Fail(AuthorizationContext context) 方法将响应代码设置为 401-Unauthorized,但最终浏览器获取302-Found 回复。
如何发送 401 响应而不是 302 ?
更新:使用 ASP.NET Core 更新问题
【问题讨论】:
-
我想你可能会在stackoverflow.com/questions/20149750/… 中找到答案,因为这对 vNext 来说并不新鲜。
-
@FrankWitte 感谢您的回答,但没有奏效。在 ASP.NET 5 中,AFAIK
System.Web(System.Web.Http.AuthorizeAttribute或System.Web.Mvc.AuthorizeAttribute)不再使用,而是Microsoft.AspNet.Mvc具有 AuthorizeAttribute。正如我所提到的,它在Fail方法中正确设置了 401 代码。我发现 Identity 中间件 (app.UseIdentity()) 将 401 代码转换为 302。作为一个肮脏的解决方案,我可以将中间件放在 Identity 中间件之上并转换回 401。但是,仍然希望以获得更好的解决方案。无论如何再次感谢。 :) -
How to return 401 instead of 302 in ASP.NET Core? 和 Disable Not Authorized Redirect to Account/Login in ASP.NET Core 可能有用。接受的答案不适用于 Asp.Net Core 2.2。链接 1 中的答案有效。
标签: asp.net asp.net-mvc asp.net-web-api asp.net-core asp.net-core-2.0