我有以下代码用于处理我的 Web 应用程序中的异常:
application.Response.Clear();
application.Response.Status = Constants.HttpServerError;
application.Response.TrySkipIisCustomErrors = true;
LogApplicationException(application.Response, exception);
try
{
WriteViewResponse(exception);
}
// now we're in trouble. lets be as graceful as possible.
catch (Exception exceptionWritingView)
{
// Exception wrapper = ??
WriteGracefulResponse(exceptionWritingView);
}
finally
{
application.Server.ClearError();
}
这里的问题是,如果在尝试将响应呈现为时出现异常ViewResult
,我将“抑制”原始异常(View
无论如何),并仅显示导致错误ViewResult
抛出的原因。
我想同时使用exception
andexceptionWritingView
并且两者都做一个例外,exceptionWritingView
在顶部。
这将是:
exceptionWritingView
-> inner exceptions of exceptionWritingView
-> original exception that raised the unhandled exception handler
-> its inner exceptions
但我无法InnerException
在我的exception
对象上设置属性。那么我怎么能做到这一点呢?
在“最好”的情况下,我可以创建一个新的Exception
using new Exception(exceptionWritingView.Message, exception)
,但我会失去部分StackTrace
加分,我会失去任何本来可以拥有的InnerException
。exceptionWritingView
反思是唯一的出路吗?用反射来做会有那么可怕吗?