1

我的 global.asaxApplication_Error消息上有一个自定义错误处理程序来处理所有未处理的异常,包括视图、控制器等中的错误

这将反过来调用适当的错误控制器,提供显示正确错误页面所需的参数。

但是,当错误控制器抛出异常时,这会失败,让我决定如何处理(这通常发生在站点布局中引入破坏性错误时)。

当前的想法是显示标准的 YSOD asp.net 页面以显示错误的来源(可能稍后我们将切换到故障安全的仅 html 错误页面,但出于调试目的,我们现在需要 YSOD)。

那么,如果错误处理失败,有什么方法可以恢复该页面?

笔记:

  1. 我们正在调用Server.ClearError(),如果我们没有得到 YOSD 页面,但出现了第一个错误,而不是第二个错误。
  2. 异常本身可以通过标准捕获并输出到屏幕Response.Write,但是我非常喜欢通过 YOSD 转储它。

编辑:代码示例。

protected void Application_Error(object sender, EventArgs e)
{
  var exception = Server.GetLastError();
  LogWriter.LogException(exception);
  HttpContext.Current.Server.ClearError();

  GenerateErrorInfo(Title, HtmlDescription, exception);            
  IController controller = new ErrorController();
  var routeData = new RouteData();
  routeData.Values.Add("controller", "Error");
  routeData.Values.Add("action", "Error");
  controller.Execute(new RequestContext(
        new HttpContextWrapper(HttpContext.Current), 
        routeData)); <<-- Exception can happen here.
}

public static void GenerateErrorInfo(string Title, string HtmlDescription, Exception exception)
{
  HttpContext.Current.Application.Add("errorTitle", Title);
  HttpContext.Current.Application.Add("errorDescription", description);
}
4

0 回答 0