7

我有一个 MVC 5.1 站点,它带有一个带有单个 POST 操作的控制器。我有一个 Android 应用程序,我想使用基本身份验证向它发布。我创建了一个BasicAuthorizeAttribute类并将其应用于我的控制器,并出于测试目的使其拒绝所有内容:

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 成功。我究竟做错了什么?

4

1 回答 1

7

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);
}
于 2014-03-12T14:12:58.857 回答