FormsAuthentication.设置响应状态码时退出失败

本文关键字:退出 失败 状态 设置 响应 FormsAuthentication | 更新日期: 2023-09-27 18:10:23

. NET mvc控制器动作,我想注册一个用户,并返回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();
}

FormsAuthentication.设置响应状态码时退出失败

public ActionResult Index()
{
   FormsAuthentication.SignOut(); 
   return new HttpUnauthorizedResult();
}

当您设置状态码401(未经授权)时,浏览器没有继续保存您之前使用SignOut()调用设置的cookie。

要完全SignOut,你必须明白你需要给浏览器留出时间来记录cookie(实际上是使用SignOut清除cookie)。

也许一个想法是重定向到一个新页面,并在这个新页面中返回401的状态码。实际上,你可以使用中间页面来完成SignOut和其他SignOut操作,然后重定向到给出消息的最终页面。

您也可以尝试在StatusCode之前调用Response.Flush();,以强制浏览器写下SignOut()的cookie