即使我设置CustomError =“On”,自定义错误页面也不会显示

时间:2012-10-10 15:55:07

标签: asp.net-mvc error-handling web-config asp.net-mvc-4

我正在使用Visual Studio 2012和MVC 4 Framework,如果未处理异常,我希望看到共享文件夹的友好错误页面。 (我知道,作为一个开发者,我需要查看错误详情,但我只想测试此设置)
到目前为止,我知道在web.config的system.web部分添加以下代码应该可以解决这个问题

<customErrors mode="On" />

不幸的是,而不是我友好的错误页面,我得到了这个:

  '/'应用程序中的服务器错误。      

运行时错误说明:发生了应用程序错误   服务器。此应用程序的当前自定义错误设置阻止   查看应用程序错误的详细信息。

     

详细信息:要启用此特定错误消息的详细信息   在本地服务器机器上可以查看,请创建一个   位于根目录中的“web.config”配置文件中的标记   当前Web应用程序的目录。这个标签   然后应将其“mode”属性设置为“RemoteOnly”。启用   要在远程机器上查看的详细信息,请将“模式”设置为   “关”。

 <!-- Web.Config Configuration File -->

 <configuration>
     <system.web>
         <customErrors mode="RemoteOnly"/>
     </system.web> </configuration> 
  

注意:您看到的当前错误页面可以替换为   自定义错误页面通过修改的“defaultRedirect”属性   应用程序的配置标记指向自定义   错误页面网址。

 <!-- Web.Config Configuration File -->

 <configuration>
     <system.web>
         <customErrors mode="On" defaultRedirect="mycustompage.htm"/>
     </system.web> </configuration>


我想按照描述执行此操作,而不是使用向HomeController添加操作,设置路由或其他内容的解决方法。
这应该起作用的参考如下:
http://pluralsight.com/training/players/PSODPlayer?author=scott-allen&name=mvc3-building-controllers&mode=live&clip=0&course=aspdotnet-mvc3-intro
(在左侧选择“动作过滤器”一章并跳至分钟3:30)


更新(链接已更改):
http://pluralsight.com/training/Player?author=scott-allen&name=mvc4-building-m2-controllers&mode=live&clip=0&course=mvc4-building
(在顶部单击指示“ASP.NET MVC 4中的控制器”的细线,然后单击“操作过滤器”并跳至分钟5:00)

有没有人知道为什么我看不到上面提到的设置的友好错误页面?
提前谢谢!

5 个答案:

答案 0 :(得分:11)

以下是执行此操作的分步指南,

首先,首先将“customErrors”模式属性设置为“on”。 (这指定启用了自定义错误。)

<强> 1。来自Web.config的代码

<system.web>

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

</system.web>

下面是我的控制器代码,我在控制器类上指定了HandleError属性。另外,为了生成错误,我从Index操作中抛出异常。

<强> 2。来自HomeController.cs的代码

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
    throw new Exception("Error Occured !");
    ViewBag.Message = "Welcome to ASP.NET MVC!";

    return View();
    }

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

正如您在下面的屏幕截图中看到的,我在Views文件夹的Shared文件夹中定义了一个Error.cshtml视图。

第3。解决方案资源管理器

enter image description here

请注意,Error.cshtml视图(如下所示)使用'System.Web.Mvc.HandleErrorInfo'模型

<强> 4。来自Error.cshtml的代码

@model System.Web.Mvc.HandleErrorInfo

@{
    ViewBag.Title = "Error";
}

<h2>
    Sorry, an error occurred while processing your request.
</h2>

在运行项目时,我现在得到以下输出,而不是获得黄色死亡屏幕。

enter image description here

取自this article

更新:

通过创建一个新项目来尝试这个,这应该并且确实有效。我怀疑您的Error.cshtml文件可能没有@model System.Web.Mvc.HandleErrorInfo的模型,或者您可能在不同的视图文件夹中有多个Error.cshtml页面。

答案 1 :(得分:5)

我修复了我的..实际上* _Layout *页面无法呈现,因为我的_Layout.cshtml被强类型化为HandleErrorInfo无法投入的基本视图模型。而且你永远不会看到这个页面绑定错误,因为只有当customError打开时才会发生...这很棒。

答案 2 :(得分:5)

可能导致您遇到的问题的一个原因是:

当'Error.cshtml'呈现时,_layout中的某些内容会导致抛出异常。

添加测试

@{
    Layout = null;
}

在“Error.cshtml”文件中。

答案 3 :(得分:1)

我在更新错误的web.config文件时遇到了同样的问题。

web.config文件夹中以及项目应用程序站点下有Views

解决方案是更新位于项目下的web.config

答案 4 :(得分:-1)

这不适用于Visual Studio Express Edition。如果您使用的是Visual Studio IDE专业版或旗舰版,则可以使用它。