在我的MVC6应用程序中,我创建了一个中间件来处理Invoke任务的全局未处理异常,如下所示:
try
{
await _next.Invoke(context);
}
catch (System.Exception e)
{
... Log the exception here...
}
我面临的问题是,如果我在添加UseDeveloperExceptionPage / UseExceptionHandle之前在configure部分添加了这个,那么中间件中的catch块没有被命中。 当我在UseDeveloperExceptionPage / UseExceptionHandle之后添加它时,错误页面或模块没有得到处理。
我怎么能不打扰错误页面/模块但仍然捕获管道中的错误并记录它?
提前致谢。
答案 0 :(得分:1)
这是因为Exception页面需要有一个Exception
对象才能使用。您的代码捕获异常然后被抑制。尝试重新抛出异常,如下所示:
try
{
await _next.Invoke(context);
}
catch (System.Exception e)
{
//Log the exception here...
throw;
}
答案 1 :(得分:1)
重新抛出错误将导致堆栈跟踪显示源自中间件的错误。您需要抛出这样的错误:ExceptionDispatchInfo.Capture(e).Throw();