gpt4 book ai didi

asp.net-web-api - 用 OWIN 中间件异常处理程序替换 Web Api 2.2 中的 IExceptionHandler

转载 作者:行者123 更新时间:2023-12-04 08:42:48 27 4
gpt4 key购买 nike

我创建了一个 OWIN 中间件来捕获异常。中间件实际上什么都不做,只是像这样用 try catch 包裹下一个调用

try {
await _next(environment)
}
catch(Exception exception){
// handle exception
}

问题是中间件没有捕获异常,因为异常是由 IExceptionHandler 的默认实现处理的,它返回一个带有堆栈跟踪的 xml。

我知道我可以用我自己的替换默认的 IExceptionHandler 实现,但我想要的是 OWIN 中间件来控制和这个默认的异常处理程序被忽略或替换为 OWIN 中间件

更新:

我已将下面的答案标记为答案,尽管它更像是一种 hack 但我真的相信没有 hack 就无法实现这一点,因为 OWIN 中间件永远不会捕获 WebApi 异常,因为 Web API 处理自己的异常,而 OWIN中间件处理在中间件中引发但未被这些中间件处理/捕获的异常

最佳答案

制作“ExceptionHandler : IExceptionHandler”,如 in this answer .然后在 HandleCore 中,处理该异常并将其推送到 OwinContext 中:

public void HandleCore(ExceptionHandlerContext context)
{
IOwinContext owinContext = context.Request.GetOwinContext();
owinContext.Set("exception", context.Exception);
}

然后在您的中间件中,检查 Environment 是否包含“异常”键。
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
}
}

关于asp.net-web-api - 用 OWIN 中间件异常处理程序替换 Web Api 2.2 中的 IExceptionHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31744146/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com