是否可以按需生成ASP.NET MVC黄色死亡屏幕(YSOD)

时间:2010-11-24 04:03:48

标签: asp.net-mvc exception-handling yellow-screen-of-death

正如here所述。

我想知道是否可以通过邮件发送YSOD的HTML渲染异常,而不使用ELMAH?我正在处理错误并向用户显示自定义错误页面。我也通过邮件发送异常一般信息,但我真的想知道我是否可以将它们包装到ASP.NET的真正内置YSOD引擎中并保持HTML格式。

UPDATE1:

我有自定义异常(DupplicatedArbsException),它返回一个带有我认为是“托管异常”的消息的视图。但是,如果它是我没有捕到的真正错误,它将返回错误视图。

    [HandleError(ExceptionType = typeof(Exception), View = "Error")]
    [HandleError(ExceptionType = typeof(DuplicatedArbsException), View = "ErrorViewArbs")]
    public ActionResult Create(string id, int? version)
    {
         //...
    }

HandleError引发当前什么都不做。

    protected override void OnException(ExceptionContext filterContext)
    {
        var ex = filterContext.Exception;
        base.OnException(filterContext);
    }

...

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

customErrors mode =“off”中引发的异常是来自asp.net的YSOD。但是,当我将customErrors mode =“on”时,这些异常不会包含在它的html等效内容中,而只包含异常消息(根本没有html)。

1 个答案:

答案 0 :(得分:1)

您可以处理global.asax中的Application_Error事件,该事件是每次未处理异常时由ASP.NET引擎触发的:

protected void Application_Error(object sender, EventArgs e)
{
    var app = (HttpApplication)sender;
    var context = app.Context;
    // get the exception that was unhandled
    Exception ex = context.Server.GetLastError();

    // TODO: log, send the exception by mail
}