我刚开始摆弄OWIN/Katana和MVC.NET 5.0。默认的Visual Studio 2013 ASP.NET Web应用程序/ MVC模板具有的AccountController与退出()动作:为什么AuthenticationManager.SignOut()在更改响应时失败?
public ActionResult LogOff() {
AuthenticationManager.SignOut();
return RedirectToAction("Index", "Home");
}
正如预期的那样,这工作得很好。但是,当我改变响应状态码时,例如通过:
Response.SetStatus(HttpStatusCode.SeeOther);
... AuthenticationManager.SignOut()方法不再导致用户注销。这是为什么?
我尝试了不同的方法来设置响应的http状态码,以及像位置一样更改http头,并始终使用相同的结果 - 执行LogOff()操作时用户未注销,如果我对这个反应进行了调整。我试过没有使用RedirectToAction(它显式地实现了302重定向 - 这是另一个故事),并没有返回ActionResult,但这没有什么区别 - 这并不是我真正期望的。
使用Fiddler我可以告诉响应,因为它看起来对浏览器看起来很好,没有任何意外。
我也试过在工作中浏览OWIN中间件的源代码,但这个架构对我来说还是不熟悉,而且我没有找到可以在那里理解的答案。我需要你的帮助来整理这个,所以提前谢谢你!
当响应回到客户端的提琴手时,你看到Set-Cookie删除旧的c ookie? –
不,我同意这是用户仍然被视为已登录的技术原因。我没有得到的是,为什么对SignOut()的调用不应该给出相同的结果,无论我是否更改状态码,删除cookie和全部。我可以自己删除cookie,或者如果我想要一个不同的行为,我甚至可以实现我自己的OWIN中间件,但我不知道。我只想要另一个状态代码,这可能与RedirectToAction实现的行为相矛盾,但为什么AuthenticationManager需要关心?我是否都在后面呢? –
下一次请求后,用户是否注销? –