2011-07-29 73 views
5

問題:當我使用HandleError屬性的Order特性,最高順序號被首先施加,相對於最低的第一個。ASP.Net MVC 3 - 在HandleError屬性中的順序似乎反向工作?

詳細

我想建立我的控制器以這種方式來處理異常:

  • 如果異常的類型是CustomException,使用「CustomError」視圖。
  • 否則,請使用默認的「錯誤」視圖。

使用默認的MVC項目模板,我已經做了以下內容:

  • 刪除從全局過濾器的HandleErrorAttribute
  • 打開web.config中的自定義錯誤。

然後,我將這些屬性添加到HomeController類:

[HandleError(ExceptionType = typeof(Exception), View = "Error")] 
[HandleError(ExceptionType = typeof(CustomException), View = "CustomError")] 

這工作正常 - 如果CustomException被拋出,「CustomError」視圖顯示;如果引發了Exception,則會顯示「錯誤」視圖。

但是,我認爲HandleError屬性上的Order屬性會使事情更加明確。來自MSDN page

整數值越大,過濾器 的優先級越低。

由此,我想到的是,下面的代碼將導致顯示在任何情況下的「錯誤」的觀點:

[HandleError(Order = 1, ExceptionType = typeof(Exception), View = "Error")] 
[HandleError(Order = 2, ExceptionType = typeof(CustomException), View = "CustomError")] 

但這種情況並非如此;這會導致與未指定Order屬性時相同的行爲。如果我交換訂單,這個會導致顯示「錯誤」視圖,即使CustomException被拋出。

基本上,實際的訂單優先級似乎與文檔完全相反。我做錯了什麼或者這是一個錯誤?

回答

0

感謝張貼這個問題!不管你信不信,微軟的MSDN documentation這個功能三年後還是不正確的。我已經向ASP.NET團隊提交了一個bug report以解決此問題。

相關問題