在表单身份验证应用程序中从web api返回401消息

时间:2016-09-20 15:47:51

标签: c# asp.net asp.net-web-api forms-authentication

如果用户未登录,我尝试从Web Api返回401,而不是在api方法上使用Authorize属性时将其发送到登录页面。 我已经看到了几个关于如何解决这个问题的想法,但没有一个对我有用。

我正在使用web api 5.2.3并且它看起来不像response.SuppressFormsAuthenticationRedirect = true; 已经工作了。

我还试图在没有运气的情况下覆盖HandleUnauthorizedRequest, 它仍然会将我重定向到登录页面。 谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

通常,我使用ASP.Net核心,框架对Web APi和MVC使用相同的控制器类型。 但是,这就是我在启动类的services.AddIdentity方法中处理该问题的方法

config.Cookies.ApplicationCookie.Events = new CookieAuthenticationEvents()
{
    OnRedirectToLogin = ctx =>
    {
        if (ctx.Request.Path.StartsWithSegments("/api") && ctx.Response.StatusCode == 200)
        {
            ctx.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
        }
        else
        {
            ctx.Response.Redirect(ctx.RedirectUri); 
        }
            return Task.FromResult(0); 
   } 
};

如果这对您有用,请告诉我