Saf*_*ain 8 asp.net asp.net-mvc asp.net-web-api asp.net-core asp.net-core-2.0
在ASP.Net/ASP.Net核心WebAPI中,
当客户端/浏览器尝试访问使用[Authorized]属性修饰的WebAPI端点时.它获取一个302-Found状态代码,其中包含对"登录"页面的重定向响应,而不是401-Unauthorized未经授权的请求.
注意:我注意到AuthorizeAttribute过滤器中的Fail(AuthorizationContext context)方法将响应代码设置为,但最终浏览器会获得响应.401-Unauthorized302-Found
如何发送401响应而不是302响应?
更新:使用ASP.NET Core更新问题
Saf*_*ain 16
终于找到了解决方案.
使用Cookie身份验证模块进行重定向.默认情况下,其LoginPath属性设置为/Account/Login.如果设置为PathString.Empty,则会将状态代码保留为401-Unauthorized不更改为302-Found.
更改CookieAuthenticationOptions在Startup.cs如下:
public void ConfigureServices(IServiceCollection services)
{
// Other configurations ...
services.Configure<CookieAuthenticationOptions>(o =>
{
o.LoginPath = PathString.Empty;
});
// ...
}
Run Code Online (Sandbox Code Playgroud)
LoginPath属性的XML文档:
LoginPath属性通知中间件它应该将传出的401 Unauthorized状态代码更改为302重定向到给定的登录路径.生成401的当前url作为ReturnUrlParameter命名的查询字符串参数添加到LoginPath.一旦对LoginPath的请求授予新的SignIn标识,ReturnUrlParameter值就会用于将浏览器重定向回导致原始未授权状态代码的URL.
如果LoginPath为null或为空,则中间件不会查找401 Unauthorized状态代码,并且在登录时不会自动重定向.
更新:正如@swdon所指出的,ASP.NET Core 2.x有不同的方法.
这是链接1中接受的答案:
从ASP.NET Core 2.x开始:
services.ConfigureApplicationCookie(options =>
{
options.Events.OnRedirectToLogin = context =>
{
context.Response.StatusCode = 401;
return Task.CompletedTask;
};
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4131 次 |
| 最近记录: |