加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 为什么当我更改响应时AuthenticationManager.Sig

发布时间:2020-12-15 22:39:09 所属栏目:asp.Net 来源:网络整理
导读:我刚刚开始在OWIN / Katana和MVC.NET 5.0中摆脱困境.默认的Visual Studio 2013 ASP.NET Web应用程序/ MVC模板具有一个具有LogOut()操作的AccountController: public ActionResult LogOff() { AuthenticationManager.SignOut(); return RedirectToAction("In
我刚刚开始在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等

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读