HandleUnauthorizedRequest

HandleUnauthorizedRequest

我有一个带有单个POST Action 的 Controller 的MVC 5.1站点。我有一个Android应用程序,希望使用基本身份验证发布到该应用程序。我创建了一个BasicAuthorizeAttribute类并将其应用于我的 Controller ,并且出于测试目的,使其拒绝所有内容:

public class BasicAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        return false;
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.HttpContext.Response.SuppressFormsAuthenticationRedirect = true;
        base.HandleUnauthorizedRequest(filterContext);
    }
}

我可以在调试器中逐步执行HandleUnauthorizedRequest,但Fiddler显示POST响应是将302重定向到登录页面的方法。我以为SuppressFormsAuthenticationRedirect应该可以防止这种情况。这是一个问题,因为Android应用程序遵循重定向并从登录请求中获得200 OK,因此看来POST成功。我究竟做错了什么?

最佳答案

将200 OK状态代码设置为HandleUnauthorizedRequest的调用上游。明确清除,设置和结束响应。在这种情况下,SuppressFormsAuthenticationRedirect似乎不是必需的。

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
    filterContext.HttpContext.Response.Clear();
    filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
    filterContext.HttpContext.Response.End();
    base.HandleUnauthorizedRequest(filterContext);
}

关于asp.net-mvc-5.1 - 为什么SuppressFormsAuthenticationRedirect在AuthorizeAttribute.HandleUnauthorizedRequest覆盖中不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22335849/

10-12 05:04