我正在使用Visual Studio 2012和MVC 4 Framework,如果未处理异常,我希望看到共享文件夹的友好错误页面。 (我知道,作为一个开发者,我需要查看错误详情,但我只想测试此设置)
到目前为止,我知道在web.config的system.web部分添加以下代码应该可以解决这个问题
<customErrors mode="On" />
不幸的是,而不是我友好的错误页面,我得到了这个:
2>'/'应用程序中的服务器错误。运行时错误说明:发生了应用程序错误 服务器。此应用程序的当前自定义错误设置阻止 查看应用程序错误的详细信息。
详细信息:要启用此特定错误消息的详细信息 在本地服务器机器上可以查看,请创建一个 位于根目录中的“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)
有没有人知道为什么我看不到上面提到的设置的友好错误页面?
提前谢谢!
答案 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。解决方案资源管理器
请注意,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>
在运行项目时,我现在得到以下输出,而不是获得黄色死亡屏幕。
更新:
通过创建一个新项目来尝试这个,这应该并且确实有效。我怀疑您的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专业版或旗舰版,则可以使用它。