我有一个带有单个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/