2012-12-13 45 views
4

我在我的應用程序中啓用了自定義錯誤。 web配置有一個條目,如下所示:自定義錯誤在我的MVC 4應用程序中不起作用

<customErrors mode="On" defaultRedirect="~/Views/Shared/Error.cshtml"> 
    <error statusCode="403" redirect="~/Views/Shared/UnauthorizedAccess.cshtml"/> 
    <error statusCode="404" redirect="~/Views/Shared/FileNotFound.cshtml"/> 
</customErrors> 

我也有應用作爲一個全球性的行動濾波器HandleError屬性。我FilterConfig內容如下:

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

另外,還有在~/Views/Shared文件夾中定義的默認Error.cshtml

但是,我的應用程序顯示IE的醜陋默認錯誤頁面。

更新

我檢查了自定義錯誤頁都出現了罰款,除了IE以外的其他瀏覽器。這裏的交易是什麼?

進一步更新

剛剛找到這篇文章。 http://perishablepress.com/important-note-for-your-custom-error-pages/

它說,IE希望自定義錯誤頁面的大小至少爲512字節。如果你的自定義錯誤頁面小於這個尺寸,它會拋出自己的醜陋錯誤頁面。

最新更新 現在一切正常,我增加了我的錯誤頁面的有效載荷。但是,只有默認的Error.cshtml頁面顯示未處理的異常。對於其他狀態代碼,我得到一個ASP.NET 404,說它無法在web.config文件中指定的位置找到我的自定義錯誤頁面。我確實有自定義錯誤頁面,並且它們具有我在web.config中指定的確切名稱。

+0

你在做的錯誤東西。 cshtml可能會導致錯誤? – ChrisBint

+0

確保在錯誤視圖中有'@model System.Web.Mvc.HandleErrorInfo '模型。 –

+0

@ChrisBint:沒什麼。這是盒子裏出來的那個。根據Nate的建議,除了剛剛添加模型之外,我還沒有觸及它。沒有效果。 –

回答

1

您不需要設置路徑到您的(* .cshtml)剃鬚​​刀文件,而需要通過您的控制器和操作提供路線。

以下是我有它工作正常

<customErrors mode="Off" defaultRedirect="/home/error"> 
    <error statusCode="404" redirect="/home/notfound" /> 
</customErrors> 

,並在我家的控制器,我有一個叫做錯誤的行動,另外一個叫NOTFOUND

[AllowAnonymous] 
public class HomeController : Controller 
{ 
    public ActionResult Error() 
    { 
    var qs = HttpUtility.ParseQueryString(Request.Url.Query); 
    var errorPath = qs["aspxerrorpath"]; 

    return View(model: errorPath); 
    } 

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

... 
} 
相關問題