我的 global.asaxApplication_Error
消息上有一个自定义错误处理程序来处理所有未处理的异常,包括视图、控制器等中的错误
这将反过来调用适当的错误控制器,提供显示正确错误页面所需的参数。
但是,当错误控制器抛出异常时,这会失败,让我决定如何处理(这通常发生在站点布局中引入破坏性错误时)。
当前的想法是显示标准的 YSOD asp.net 页面以显示错误的来源(可能稍后我们将切换到故障安全的仅 html 错误页面,但出于调试目的,我们现在需要 YSOD)。
那么,如果错误处理失败,有什么方法可以恢复该页面?
笔记:
- 我们正在调用
Server.ClearError()
,如果我们没有得到 YOSD 页面,但出现了第一个错误,而不是第二个错误。 - 异常本身可以通过标准捕获并输出到屏幕
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);
}