asp.net-mvc – 为什么当我更改响应时AuthenticationManager.SignOut()失败?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 为什么当我更改响应时AuthenticationManager.SignOut()失败?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我刚刚开始在OWIN / Katana和MVC.NET 5.0中摆脱困境.默认的Visual Studio 2013 ASP.NET Web应用程序/ MVC模板具有一个具有logout()操作的AccountController:
public ActionResult logoff() {
    AuthenticationManager.SignOut();
    return RedirectToAction("Index","Home");
}

正如预期的那样,这个工作很好.然而,当我改变响应状态码时,例如通过:

Response.SetStatus(HttpStatusCode.SeeOther);

… AuthenticationManager.SignOut()方法不再导致用户注销.这是为什么?

我尝试了不同的方法来设置响应的http状态代码,以及更改位置等HTTP头,并始终使用相同的结果 – 当执行logoff()操作时,用户不会注销,如果我进入回火与响应.

我试图没有使用RedirectToAction(它明确地实现了302重定向 – 这是另一个故事),而不是返回一个ActionResult,但没有任何区别 – 而不是我真的希望它.

使用Fiddler我可以看出浏览器看起来的响应看起来不错,没有任何惊喜.

我也尝试着在OWIN中间件的源代码工作,但架构对我来说还是不熟悉的,我发现没有可以把握的答案.我需要你的帮助排序,所以谢谢你提前!

解决方法

AuthenticationManager.SignOut()失败的原因是Response.SetStatus(HttpStatusCode.SeeOther)在内部结束响应:
public static void SetStatus(this HttpResponseBase response,int httpStatusCode)
{
  response.StatusCode = httpStatusCode;
  response.End();
}

(请参阅System.Web.WebPages.ResponseExtensions)

之后,ResponseManager自然无法操纵响应以删除cookies等

猜你在找的asp.Net相关文章