Sul*_*Aga 8 middleware asp.net-web-api owin asp.net-web-api2
我创建了一个OWIN中间件来捕获异常.中间件什么也没做,但是像这样用try catch包装下一个调用
try {
await _next(environment)
}
catch(Exception exception){
// handle exception
}
Run Code Online (Sandbox Code Playgroud)
问题是middlware没有捕获异常,因为异常是由IExceptionHandler的默认实现处理的,它返回带有堆栈跟踪的xml.
我知道我可以用我自己的实现替换默认的IExceptionHandler实现,但我想要的是OWIN中间件采取控制,这个默认的异常处理程序被忽略或替换为OWIN中间件
更新:
我已经将下面的答案标记为答案,虽然它更像是一个黑客,但我真的相信没有黑客可以实现这一点,因为WebApi异常永远不会被OWIN中间件捕获,因为Web API处理它自己的异常而OWIN中间件处理在中间件中引发但未被这些中间件处理/捕获的异常
像这个答案一样创建一个“ExceptionHandler:IExceptionHandler” 。然后在 HandleCore 中,获取该异常并将其推入 OwinContext 中:
public void HandleCore(ExceptionHandlerContext context)
{
IOwinContext owinContext = context.Request.GetOwinContext();
owinContext.Set("exception", context.Exception);
}
Run Code Online (Sandbox Code Playgroud)
然后在您的中间件中,检查环境是否包含“例外”键。
public override async Task Invoke(IOwinContext context)
{
await Next.Invoke(context);
if(context.Environment.ContainsKey("exception")) {
Exception ex = context.Environment["exception"];
// Do stuff with the exception
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3035 次 |
| 最近记录: |