设置响应状态代码时,FormsAuthentication.SignOut失败

时间:2011-10-05 00:48:06

标签: c# asp.net asp.net-mvc asp.net-mvc-3 forms-authentication

在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();
}

2 个答案:

答案 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。