8

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

<customErrors mode="On" />

不幸的是,我得到的不是我友好的错误页面:

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

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

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

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

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

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

 <!-- 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 中的控制器”的细线,然后单击“Action Filters”并跳到 5:00 分钟)

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

4

5 回答 5

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. 解决方案资源管理器

在此处输入图像描述

请注意,Error.cshtml 视图(如下所示)使用“System.Web.Mvc.HandleErrorInfo”模型</p>

4. 来自 Error.cshtml 的代码

@model System.Web.Mvc.HandleErrorInfo

@{
    ViewBag.Title = "Error";
}

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

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

在此处输入图像描述

取自这篇文章

更新 :

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

于 2012-10-10T17:18:12.467 回答
5

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

_layout 中的某些内容导致在呈现“Error.cshtml”时引发异常。

做一个测试添加

@{
    Layout = null;
}

在您的“Error.cshtml”文件中。

于 2014-06-12T14:45:35.593 回答
5

我修复了我的.. 它实际上是 *_Layout* 页面无法呈现,因为我_Layout.cshtml的强类型为无法转换的基本视图模型HandleErrorInfo。而且您永远不会看到此页面绑定错误,因为它仅在打开时才会发生customError……太好了。

于 2013-09-14T11:25:51.513 回答
2

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

文件夹中有一个web.configViews项目应用程序站点下也有一个。

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

于 2013-03-19T12:59:13.837 回答
-1

这不适用于 Visual Studio 速成版。如果您使用的是 Visual Studio IDE 的专业版或终极版,它可以工作。

于 2014-01-26T06:25:43.723 回答