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

LFi*_*ish 8 error-handling asp.net-mvc web-config asp.net-mvc-4

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

<customErrors mode="On" />
Run Code Online (Sandbox Code Playgroud)

不幸的是,我得到了这个:

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

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

详细信息:要在本地服务器计算机上查看此特定错误消息的详细信息,请在位于当前Web应用程序根目录中的"web.config"配置文件中创建标记.然后,此标记应将其"mode"属性设置为"RemoteOnly".要使详细信息可在远程计算机上查看,请将"mode"设置为"Off".

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

 <configuration>
     <system.web>
         <customErrors mode="RemoteOnly"/>
     </system.web> </configuration> 
Run Code Online (Sandbox Code Playgroud)

注意:通过修改应用程序配置标记的"defaultRedirect"属性以指向自定义错误页面URL,可以将自动查看的当前错误页面替换为自定义错误页面.

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

 <configuration>
     <system.web>
         <customErrors mode="On" defaultRedirect="mycustompage.htm"/>
     </system.web> </configuration>
Run Code Online (Sandbox Code Playgroud)


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

更新(链接已更改):
http ://pluralsight.com/training/Player?author = scott -allen&name = mvc4-building-m2-control-mode = live&clip = 0 &course=mvc4 -building
(在顶部单击指示"ASP.NET MVC 4中的Controller"的细线,然后单击"Action Filters"并跳到分钟5:00)

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

Yas*_*ser 11

这是一步一步指导这样做,

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

1.来自Web.config的代码

<system.web>

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

</system.web>
Run Code Online (Sandbox Code Playgroud)

下面是我的控制器代码,我在控制器类上指定了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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

3.解决方案Explorer

在此输入图像描述

请注意,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>
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

摘自这篇文章

更新:

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

  • 不幸的是,对我来说它仍然没有用.我告诉过你,我已经完成了.此外,HandleErrorAttribute默认在global.asax中注册,因此我通常不需要为Homecontroller设置该属性. (4认同)

小智 5

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


Oli*_*veu 5

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

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

做一个测试添加

@{
    Layout = null;
}
Run Code Online (Sandbox Code Playgroud)

在你的'Error.cshtml'文件中.

  • 遗憾的是我只能投票一次.谢谢. (2认同)