我讀過很多文章和幾個帖子(包括這裏在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
我評論了行'filters.Add(new HandleErrorAttribute())',但仍然繼續相同的行爲。 此鏈接是我在研究該主題時找到的鏈接之一,但不希望使用「Application_Error」。 我會使用'HandleErrorAttribute'來處理我的應用程序的錯誤。 – ridermansb
@Riderman de Sousa Barbosa,我已經完成了您在新ASP.NET MVC 3項目中描述的步驟,刪除了我的答案中顯示的自定義錯誤行,添加了您在web.config中顯示的內容,修改了Index操作的HomeController來匹配你所顯示的,它對我來說工作得非常好。 –
我發現了錯誤! 出於某種原因,錯誤發生在鏈接上,「@Response [」aspxerrorpath「]'我評論了這一行,它的工作很完美。 我在看到錯誤日誌時發現了以下消息: 無法對[] System.Web.HttpResponseBase類型的表達式應用索引, – ridermansb