在ASP.NET MVC3控制器操作中,我想注销用户并返回401状态代码。代码很简单:
public ActionResult Index()
{
FormsAuthentication.SignOut();
HttpContext.Response.StatusCode = 401;
return null;
}
设置状态代码时,用户未注销。为什么?如果我删除状态代码行,则用户已注销,但我不想返回200状态。
这里发生了什么?我怎样才能实现理想的行为?
这就是我最终解决问题的方法:
if (Request.IsAjaxRequest())
{
FormsAuthentication.SignOut();
Response.StatusCode = 401;
Response.Flush();
return null;
}
else
{
FormsAuthentication.SignOut();
return new HttpUnauthorizedResult();
}
答案 0 :(得分:1)
public ActionResult Index()
{
FormsAuthentication.SignOut();
return new HttpUnauthorizedResult();
}
答案 1 :(得分:1)
当您设置状态代码401(未授权)时,浏览器不会继续保存您之前使用SignOut()调用设置的cookie。
要完全SignOut,您必须了解您需要让浏览器留下时间来记下cookie(实际上用SignOut清除cookie)。
也许一个想法是重定向到一个新页面,并在这个新页面中返回401的状态代码。实际上你可以使用一个中间页面来制作SignOut和其他SignOut操作,然后重定向到给出消息的最后一页。
您也可以尝试在Response.Flush();
之前调用StatusCode
,强制浏览器记下SignOut()的Cookie。