解決MVC3 伺服器無法在已傳送 HTTP 標頭之後設定狀態 問題
阿新 • • 發佈:2018-12-19
最近在檢視yifen.com網站的執行日誌,發現每天都有好幾M的日誌檔案,裡面都是同樣的錯誤如下:
2013-04-03 14:03:30,397 [13] ERROR Quan.Com.Controllers.CustomeExceptionAttribute [(null)] <(null)> - 發生時間:04/03/2013 14:03:30發生異常頁: http://www.yifen.com/memberinfo/ViewMyQuan/異常資訊: 伺服器無法在已傳送 HTTP 標頭之後設定狀態。錯誤源:System.Web堆疊資訊: 在 System.Web.HttpResponse.set_StatusCode(Int32 value) 在 System.Web.Mvc.HttpStatusCodeResult.ExecuteResult(ControllerContext context) 在 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)--------------------------------------<br >2013-04-03 14:03:30,453 [13] ERROR Quan.Com.Controllers.CustomeExceptionAttribute [(null)] <(null)> - 出錯者IP:115.236.163.194
由於一開始就是學的MVC3,在之前也沒有相關處理經驗,網上查了很多資料都只是講應該在請求傳送到流之前做如下處理:
Response.BufferOutput = true;
我在每一處跳轉的地方 都加上,但問題依舊
Response.BufferOutput = true; return Redirect("/member/logon");
這個問題其實不會影響網站的執行,程式碼執行後客戶端會跳轉成功,但是每次在檢視網站執行狀態的時候,都會看到如天書的異常資訊,實在很煩
既然伺服器已經在輸出HTTP標頭,那麼我可不可以把這個標頭資訊都清除,然後重新設定呢,想到這裡,我改進了一下程式碼並封裝了一個方法以後備用
1 public void RedirectUrl(string url)2 {3 this.Response.Clear();//這裡是關鍵,清除在返回前已經設定好的標頭資訊,這樣後面的跳轉才不會報錯4 this.Response.BufferOutput = true;//設定輸出緩衝5 if (!this.Response.IsRequestBeingRedirected)//在跳轉之前做判斷,防止重複6 {7 this.Response.Redirect(url, true);8 }9 }
搞定,世間清靜了很多。