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?}");
        });

ASP.net 5.0-WebAPI Authorize&;错误代码302而不是401

这应该由客户端解决。客户端必须发送具有值XMLHttpRequestX-Requested-With报头。

因此,这应该是HTTP请求中标头部分的一部分:

X-Requested-With: XMLHttpRequest

现在,你将在没有黑客的情况下获得401。