2014-11-06 114 views
2

在我正在處理的ASP.NET MVC Web應用程序中,當應用程序中存在未被捕獲的錯誤時,我顯示na錯誤視圖。在Web.config:儘管存在錯誤視圖,但找不到錯誤頁面ASP.NET MVC

<customErrors mode="On" defaultRedirect="~/Error" /> 

控制器:

public class ErrorController : BaseController 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

而且我在文件夾視圖/錯誤,Index.cshtml視圖。其內容對於我面臨的問題並不重要。

當出現例如錯誤404時,一切正常 - 顯示Error Index.cshtml頁面(URL爲http://localhost:51099/Error?aspxerrorpath=/Home/ssad,確定),並在應用程序的錯誤日誌中報告404錯誤。但是當出現其他錯誤時,例如,當我嘗試通過我的應用程序在不存在的文件夾中創建文件時,會顯示Error Index.cshtml視圖(URL爲http://localhost:51099/Error?aspxerrorpath=/AdminDataExport/ResponseMatrix,這是正常的),但有兩個錯誤報告 - 一個文件夾無法找到這是確定的,而另一個是:

The view 'Error' or its master was not found or no view engine supports 
the searched locations. The following locations were searched: 
~/Views/AdminDataExport/Error.aspx 
~/Views/AdminDataExport/Error.ascx 
~/Views/Shared/Error.aspx 
~/Views/Shared/Error.ascx 
~/Views/AdminDataExport/Error.cshtml 
~/Views/AdminDataExport/Error.vbhtml 
~/Views/Shared/Error.cshtml 
~/Views/Shared/Error.vbhtml 

爲什麼應用程序查找在這個位置的錯誤文件,當我有一個ErrorController和相應的視圖定義?爲什麼第二個錯誤在某些情況下會出現,有些則不會?

我想修復第二個錯誤。我試圖通過在Views/Shared中添加一個Error.cshtml文件來修復它。結果是第二個錯誤沒有被記錄,這是我想要的,但是URL與第一個錯誤不同 - http://localhost:51099/AdminDataExport/ResponseMatrix,我希望它是http://localhost:51099/Error?aspxerrorpath=/AdminDataExport/ResponseMatrix。這可能嗎?

+0

如果您現在正在編寫代碼並可以使用其他方法,請在此問題中檢查我的答案,這可能會有所幫助 - > http://stackoverflow.com/questions/26357340/asp-mvc-handleerror-attribute-doesnt -work/26359455#26359455 – SBirthare 2014-11-06 11:21:45

+0

@SBirthare我實施了你的解決方案,我有兩個問題。一行是'controller.ViewData.Model = new HandleErrorInfo(ex,currentController,currentAction);'。在「前」我得到一個警告「可能'空'分配給標有'NotNull'屬性的實體」。其次,當我產生一個錯誤時,它給了我一個錯誤頁面的源代碼(HTML),而不是渲染頁面。你有沒有類似的經歷?如何解決這種情況? – kiriz 2014-11-06 14:24:05

+0

我沒有在這行添加額外的檢查,還沒有測試過這種情況。您可以添加支票。第二個問題,這個方法根據錯誤代碼在ErrorController上調用一個動作。您可以決定從該操作返回的內容。在我的情況下,我返回相應的視圖。希望這個幫助。 – SBirthare 2014-11-06 14:48:24

回答

0

啊哈!

找到了答案......

MVC增加了一個FilterConfig類用下面的代碼。

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

只要將其刪除,錯誤消失!