asp.net-mvc-5 – 在@Html.AntiForgery发送HTTP标头后,服务器无
我正在开发一个asp.net mvc 5应用程序,我试图通过应用下面的代码重定向到ReturnUrl:
[HttpPost] [AllowAnonymous] public ActionResult Login(UserLogin model,string returnUrl) { if (ModelState.IsValid) { string EncryptedPassword = GetMD5(model.Password); if (DataAccess.DAL.UserIsValid(model.Username,EncryptedPassword)) { FormsAuthentication.SetAuthCookie(model.Username,true); if (String.IsNullOrEmpty(returnUrl)) { return RedirectToAction("Index","Home"); } else { Response.Redirect(returnUrl); } } else { ModelState.AddModelError("","Invalid Username or Password"); } } return View(); } 上面的代码工作正常,但问题是当我发布登录表单时,它给了我一个我以前从未遇到过的异常,我很难解决在Login.cshtml视图中生成的异常,在线: @Html.AntiForgeryToken() 它抛出的异常: Server cannot append header after HTTP headers have been sent. 我研究了很多,但我无法得出结论.当我删除@ Html.AntiForgeryToken()行时,我的应用程序工作正常,但我不想这样做,我希望我的应用程序保持跨站点请求保护. 任何人都可以帮助我,我如何摆脱这个例外? 解决方法
当Response.Redirect(anyUrl)的状态代码设置为302时,标题将添加到响应中:
HTTP 1.0 302 Object Moved Location: http://anyurl.com 当执行ViewResult并且razor呈现视图时,将调用Html.AntiForgeryToken(),因此帮助程序尝试将标题X-Frame-Options和一些cookie添加到响应中,这是异常的原因. 但是不要担心你可以抑制添加X-Frame-Options标头,只需把这个AntiForgeryConfig.SuppressXFrameOptionsHeader = true;在Application_start中. 但我建议你改变这个: Response.Redirect(returnUrl); 至 return Redirect(returnUrl); 注意 自.NET代码打开后,您可以看到AntiForgeryToken的工作原理,请参见此处AntiForgeryWorker (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 实体框架4.0扩展和安全
- asp.net-mvc – ASP.NET MVC 4移动显示模式停止工作
- asp.net-mvc – SSL握手问题? (当时:网页挂起,只清除浏览
- asp.net – Paypal Express Checkout集成问题(WEBREQUEST)
- ASP .NET – Eval()背后发生了什么?
- asp.net-mvc – F#支持最新的asp.net 5和MVC6
- asp.net – 如何使用Excel服务器端?
- 使用ASP.Net会员提供商忘记密码?
- asp.net – 如何绑定DropDownList的选定值
- asp.net-mvc – ASP.NET MVC4 CustomErrors DefaultRedirec