5

我在 webconfig 中打开了自定义错误并重定向到“/Error/Trouble”。这是按设计工作的。Elmah 正在记录错误。错误视图也正在显示。

问题是我想检查错误控制器的故障操作中抛出的错误。抛出错误时,在 MVC 将您重定向到自定义错误处理程序后,您如何访问它?

如果 CurrentUser 为空,我将抛出异常:

        if (CurrentUser == null)
        {
            var message = String.Format("{0} is not known.  Please contact your administrator.", context.HttpContext.User.Identity.Name);
            throw new Exception(message, new Exception("Inner Exception"));
        }

我希望能够在我的自定义错误处理程序(“错误/故障”)中访问它。你如何访问异常?

这是我的麻烦行动:

    public ActionResult Trouble()
    {
        return View("Error");
    }

这是我的看法:

@model System.Web.Mvc.HandleErrorInfo

<h2>
    Sorry, an error occurred while processing your request.
</h2>
@if (Model != null)
{
    <p>@Model.Exception.Message</p>
    <p>@Model.Exception.GetType().Name<br />
    thrown in @Model.ControllerName @Model.ActionName</p>
    <p>Error Details:</p>
    <p>@Model.Exception.Message</p>
}

System.Web.Mvc.HandleErrorInfo 是我的故障视图的模型,它是空的。谢谢你的帮助。

4

1 回答 1

2

我找到了解决方法:

在 Global.asax 我这样做:

        protected void Application_Error()
    {
        var exception = Server.GetLastError();

        HttpContext.Current.Application.Lock();
        HttpContext.Current.Application["TheException"] = exception;
        HttpContext.Current.Application.UnLock();
    }

在错误/故障中,我这样做:

        var caughtException = (Exception)HttpContext.Application["TheException"];
        var message = (caughtException!= null) ? caughtException.Message : "Ooops, something unexpected happened.  Please contact your system administrator";
        var ex = new Exception(message);
        var errorInfo = new HandleErrorInfo(ex, "Application", "Trouble");
        return View("Error", errorInfo);

这是有效的。但这似乎是一种奇怪的方式。有没有人有更好的解决方案?谢谢你的帮助。

于 2012-05-11T20:28:04.183 回答