2011-07-25 41 views
2

我讀過很多文章和幾個帖子(包括這裏在stackoverflow中),但不知道我在做什麼錯了。錯誤與自定義HandleErrorAttribute不起作用

這裏我的代碼:

的Global.asax.cs

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
} 

ErrorControler.cs

public class ErrorController : Controller 
{ 
    public ActionResult Error404() 
    { 
     return View(); 
    } 

    public ActionResult Error500() 
    { 
     return View(); 
    } 
} 

的Web.config

<customErrors mode="On" defaultRedirect="~/Error/Error500"> 
    <error statusCode="404" redirect="~/Error/Error404"/> 
</customErrors> 

MyController.cs

public ActionResult Index() 
{ 
    using (var db = new DataContext()) 
    { 
     int a = 2, b = 0; 
     var r = a/b; 
     return View(r); 
    } 
} 

Error500.cshtml

@model System.Web.Mvc.HandleErrorInfo 
@{ 
    ViewBag.Title = "Erro"; 
} 

<h2>@ViewBag.Title</h2> 
<div id="error-info"> 
    <p>Ocorreu um erro inexperado na página <a class="error-url" href="@Response["aspxerrorpath"]" title="Origem do erro">@Response["aspxerrorpath"]</a></p> 
    <p>Se o erro persistir, por-favor, entre em contato com os administradores do site.</p> 
    <div class="error-details"> 
     <p>@Model.Exception.Message</p> 
    </div> 
</div> 

當我嘗試訪問的路徑/MyController出現以下消息:

服務器錯誤在'/'Appl ication。

無法找到該資源。

描述:HTTP 404.您正在查找的資源(或其中一個 依賴項)可能已被刪除,名稱已更改,或者 暫時不可用。請檢查以下URL並確定 拼寫正確。

請求的URL:/錯誤/ Error500

我想,當任何控制器上的錯誤,如果HTTP狀態代碼尚未在web.config中獲悉,其重定向到默認視圖Error500這種情況發生

例如,在this article中,它處理DbException錯誤,但想要處理任何類型的錯誤。

類型404(頁面未找到)的錯誤完美地工作。用戶被重定向到頁面Error404.cshtml

回答

8

如果您希望這種情況發生刪除/從你的Global.asax註釋以下行:

filters.Add(new HandleErrorAttribute()); 

基本上,你必須選擇是否要ASP.NET來處理你的錯誤(在你的web.config中<customErrors>部分)或ASp.NET MVC(全球HandleErrorAttribute動作過濾器,它的方式要求你打開web.config中的自定義錯誤)

或檢出的替代方法爲handling errors in ASP.NET MVC(與此諒解h您仍然需要刪除我在Global.asax上顯示的線路)。

+0

我評論了行'filters.Add(new HandleErrorAttribute())',但仍然繼續相同的行爲。 此鏈接是我在研究該主題時找到的鏈接之一,但不希望使用「Application_Error」。 我會使用'HandleErrorAttribute'來處理我的應用程序的錯誤。 – ridermansb

+0

@Riderman de Sousa Barbosa,我已經完成了您在新ASP.NET MVC 3項目中描述的步驟,刪除了我的答案中顯示的自定義錯誤行,添加了您在web.config中顯示的內容,修改了Index操作的HomeController來匹配你所顯示的,它對我來說工作得非常好。 –

+0

我發現了錯誤! 出於某種原因,錯誤發生在鏈接上,「@Response [」aspxerrorpath「]'我評論了這一行,它的工作很完美。 我在看到錯誤日誌時發現了以下消息: 無法對[] System.Web.HttpResponseBase類型的表達式應用索引, – ridermansb