Asp.net-Mvc-5
發送 HTTP 標頭後伺服器無法附加標頭 @Html.AntiForgery 出現異常
我正在開發一個 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()以及它拋出的異常:
發送 HTTP 標頭後,伺服器無法附加標頭。
我研究了很多,但我無法得出結論。當我刪除 @Html.AntiForgeryToken() 行時,我的應用程序工作正常,但我不想這樣做,我希望我的應用程序保持跨站點請求保護。
誰能幫幫我,我該如何擺脫這個異常?
當
Response.Redirect(anyUrl)狀態碼設置為 302 時,標頭將添加到響應中:HTTP 1.0 302 Object Moved Location: http://anyurl.com並且當
ViewResult被執行並且剃刀渲染視圖時Html.AntiForgeryToken()將呼叫,因此助手嘗試將標頭X-Frame-Options和一些cookie添加到響應中,這是異常的原因。但是不要擔心你可以抑制添加
X-Frame-Options標題,只需將它AntiForgeryConfig.SuppressXFrameOptionsHeader = true;放在Application_start.但我建議你改變這個:
Response.Redirect(returnUrl);到
return Redirect(returnUrl);筆記
由於 .NET 程式碼已打開,您可以查看其
AntiForgeryToken工作原理,請參見此處AntiForgeryWorker。