39 asp.net-mvc exception-handling handleerror
在两个不同的应用程序中,一个是自定义的另一个是使用新的VS2008 MVC项目获得的示例MVC应用程序,[HandleError]没有捕获异常.
在示例应用程序中,我有:
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
throw new Exception();
return View();
}
public ActionResult About()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
这只是默认控制器,抛出异常进行测试.
但它不起作用.它没有进入默认的error.aspx页面,而是在浏览器中显示调试信息.
问题首先出现在我正在处理的自定义应用程序中,这导致我使用示例应用程序对其进行测试.认为它与我在自定义应用程序中所做的更改有关,我将示例应用程序完全保持不变,并在index方法中抛出异常(yuck).
我很难过.我错过了什么?
Cra*_*ntz 67
在Web.config中,更改customErrors:
<system.web>
<customErrors mode="On">
</customErrors>
Run Code Online (Sandbox Code Playgroud)
如果模式为Off或RemoteOnly,那么您将看到死亡的黄色屏幕而不是自定义错误页面.原因是开发人员通常希望在死亡的黄色屏幕上获得更详细的信息.
Sim*_*ver 16
重要提示:请注意您的错误页面本身没有错误!
如果是这样的话,你最终会得到那个ASP.NET自定义错误页面并最终绕圈并撕掉你的头发.只需从页面中删除可能导致错误并测试的所有内容.
此外,关于'customErrors'是ON还是OFF,有几个因素会影响是否显示友好错误页面(您的Errors.aspx)页面.
看到这个博客(下面除外)
HttpContext.IsCustomErrorEnabled - 查看三个不同的来源
- web.config的<deployment>部分的零售属性.在将应用程序部署到生产服务器时,这是一个有用的属性.这会覆盖自定义错误的任何其他设置.
- web.config的<customErrors>部分的mode属性.此设置指示是否根本启用自定义错误,如果是,则指示是否仅为远程请求启用它们.
- HttpRequest对象的IsLocal属性.如果仅为远程请求启用了自定义错误,则需要知道该请求是否来自远程计算机.
这里的想法是,您可以在开发期间关闭"customErrors" - 当您确实想要查看错误,然后仅将其启用以进行生产.
这篇MSDN文章进一步讨论了该属性.
Pal*_*ani 13
这个问题的另一个原因可能是,
在模板MVC应用程序(由VS2008/VS2008 Express生成)中,Error.aspx(由VS生成)使用母版页.
如果Master Page访问任何ViewData,它将抛出null引用Exception,则不会显示error.aspx.
使用这个简单代码作为您的Error.aspx,它将解决问题,(以及CustomErrors = On)
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<System.Web.Mvc.HandleErrorInfo>" %>
<%= Model.Exception.Message %>
Run Code Online (Sandbox Code Playgroud)
我也在努力解决这个问题,我相信我现在明白了这个问题.
简而言之,[HandleError]按预期工作的要求是:
您必须在web.config中启用自定义错误,并且还必须指定错误视图在<customErrors>标记中的位置.
例:
<customErrors mode="On" defaultRedirect="Error" />
Run Code Online (Sandbox Code Playgroud)
离开defaultRedirect="Error"零件将在浏览器中产生500错误 - 而不是ASP.NET错误页面(YSOD).
此外,您不必处于发布模式.我用Debug构建测试了它,它工作正常.
我的环境是使用.NET 4的Visual Studio 2010和标准的"ASP.NET MVC 2 Web应用程序"项目模板.
使我困惑的是HandleErrorAttribute类的MSDN文档.它没有明确说明你必须在web.config中打开自定义错误.而且我认为我所需要的只是[Handle Error]属性.
有一些愚蠢的情况曾经发生在我身上,所以可能对某人有所帮助.
确保您已添加<customErrors mode="On" />到正确的 web.config文件中.
有时候(尤其是当您使用Resharper工作,并通过键入其名称而不是通过解决方案资源管理器打开文件时),您只需从Views文件夹或甚至从另一个项目打开web.config即可.
| 归档时间: |
|
| 查看次数: |
25169 次 |
| 最近记录: |