gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:05:50 24 4
gpt4 key购买 nike

我刚开始摆弄 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 状态代码,以及更改诸如 Location 之类的 http header ,并且始终具有相同的结果 - 如果我进入回火状态,则在执行 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无法操纵响应以删除 cookie 等。

关于asp.net-mvc - 为什么 AuthenticationManager.SignOut() 在我更改响应时失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20563682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com