簡體   English   中英

在ASP.NET MVC應用程序中使用HandleErrorAttribute

[英]Using of HandleErrorAttribute in ASP.NET MVC application

我有一個關於在我的MVC 5應用程序中使用HandleErrorAttribute的最佳方法的問題。 我們知道,我們可以將此屬性添加到全局過濾器中:

 filters.Add(new HandleErrorAttribute{View = "Error"});

這涉及應用程序每次在任何級別的應用程序中拋出未處理的異常時顯示“錯誤”視圖。 但是,如果我在另一個全局授權或動作過濾器中有一些邏輯,這會產生一些異常,那么當第一次拋出異常時,應用程序會嘗試重定向到錯誤視圖,同樣其他過濾器開始執行並產生相同的異常再次,所以asp.net避免循環終止應用程序。 那么使用這個HandleErrorAttribute來避免這種行為的最佳方法是什么? 謝謝!

編輯:經過一些調試后我發現這不是HandleErrorAttribute的常見行為,所以只有當我使用自定義路由時,才會出現循環

{key}/{controller}/{action}

當過濾器邏輯中出現一些錯誤時,應用程序嘗試重定向到錯誤視圖,但是另一個過濾器邏輯再次開始執行,我甚至在{key}路由參數中看到“錯誤”值,因此它是不需要的行為。 當我使用默認路由{controller}/{action}這種情況不會發生,而且我沒有再次執行任何全局過濾器邏輯而得到錯誤視圖。

您應該將動作過濾器邏輯包裝在try catch ,然后在catch塊內,重定向到Error視圖並傳遞Exception

您唯一的另一種選擇是完全拋棄HandleError並使用Global.asax中的Application_Error事件來管理您的錯誤處理。 這樣,你可以重定向到你的Error動作里面就有無論出現錯誤的位置。

Matt對global.asax是正確的......這是我遵循的例子http://www.digitallycreated.net/Blog/57/getting-the-correct-http-status-codes-out-of-asp.net-自定義錯誤頁

然后在每個視圖中我添加:Response.StatusCode = 500; 或者我希望向客戶展示其他代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM