2011-05-04 58 views
4

我試圖重定向到一個自定義的錯誤頁面(通過特定的控制器)來處理尚未明確處理的HTTP錯誤代碼。MVC 3,defaultRedirect和HandleErrorInfo模型

爲了推動這項工作,我有以下的配置

<customErrors mode="On" defaultRedirect="errors" /> 

而對於我的控制器:

public class ErrorsController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

的想法是我最終能處理在這裏顯示自定義錯誤的詳細信息,在和高於Error.cshtml顯示的內容。

我的問題是圍繞收到錯誤信息......我沒有HandleErrorInfo例如,我可以找到,也不Service.GetLastError()返回什麼...

有誰知道如何產生或者得到一個HandleErrorInfo對象? - 我寧願使用它,並以某種方式填充以適應其餘的錯誤處理。

感謝,
基隆

回答

3

中的HandleError屬性添加到您的控制器(或具體行動):

[HandleError] 
public class HomeController 

然後用這個在你的web.config根據不同的錯誤控制重定向行爲:

<system.web> 
    <customErrors mode="On" defaultRedirect="Error.aspx"> 
    <error statusCode="403" redirect="NoAccess.htm"/> 
    <error statusCode="404" redirect="FileNotFound.htm"/> 
    </customErrors> 
</system.web> 

我相信你可以調整重定向使用自定義/控制器/操作,這應該爲您提供HandleErrorInfo希望但從未嘗試過。

+0

有趣 - 我已經在(base)控制器上得到了HandleError屬性。仍然沒有快樂。 – Kieron 2011-05-04 13:34:33

+0

請注意,默認重定向直接轉到「〜Views \ Shared \ Error.aspx」,而不是由您控制的任何控制器。 Error.aspx具有要使用的HandleErrorInfo模型。這變成了帶有剃鬚刀引擎的Error.cshtml或Error.vbhtml。 – 2011-05-04 13:39:54

+0

我不認爲你可以重定向到一個控制器動作,只有可選地使用HandleErrorInfo模型的頁面以比顯示異常和調用堆棧更好的方式向用戶顯示錯誤。 – 2011-05-04 13:50:22

2

如果您使用Razor將[HandleError]放在控制器的頂部。將名爲Error.cshtml的錯誤頁面放入共享文件夾中。

在你的web.config設置隨後應該如下:
的customErrors模式=「開」

任何重定向上述聲明將不會被使用。

就是這樣。未處理的異常將顯示您的錯誤頁面。 要在調試模式下測試這個,確保customErrors mode =「On」在您的主web.config中設置。