ASP.net 5.0-WebAPI Authorize&;错误代码302而不是401
本文关键字:错误代码 amp net 0-WebAPI Authorize ASP | 更新日期: 2023-09-27 18:26:06
我有一个ASP.net 5.0(MVC 6)网站,该网站也用于一些移动应用程序。我有一个返回json数据的控制器。
用户必须进行身份验证才能看到这些数据,所以我使用控制器的[授权]属性。
我本以为未经授权的请求会得到错误401,但我得到了重定向(302)到登录页面。在移动客户端中,a将头设置为只接受"application/json"数据,但我仍然可以重定向到登录页面。
我开发了一个有效的解决方案,但我对此不太满意。它有效,但这是一种破解。
有更好的解决方案吗?
这里是我的解决方案(在启动类中配置方法)
//....Some Code
app.Use(async (context, next) =>
{
await next.Invoke();
if (context.Response.StatusCode == 302)
{
StringValues contentType;
if (context.Request.Headers.TryGetValue("Accept", out contentType)
&& contentType.Contains("application/json"))
{
context.Response.StatusCode = 401;
if (env.IsDevelopment())
await context.Response.WriteAsync("No Access");
}
}
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
这应该由客户端解决。客户端必须发送具有值XMLHttpRequest
的X-Requested-With
报头。
因此,这应该是HTTP请求中标头部分的一部分:
X-Requested-With: XMLHttpRequest
现在,你将在没有黑客的情况下获得401。