gpt4 book ai didi

c# - OWIN/Katana 未处理的异常全局处理程序?

转载 作者:IT王子 更新时间:2023-10-29 04:05:01 25 4
gpt4 key购买 nike

在 Katana (OWIN) 实现中实现全局异常捕获器-处理程序的正确方法是什么?

在作为 Azure 云服务( worker 角色)运行的自托管 OWIN/Katana 实现中,我将这段代码放在中间件中:

throw new Exception("pooo");

然后我将这段代码放在 Startup 类的 Configuration 方法中,在事件处理程序中设置断点:

 AppDomain.CurrentDomain.UnhandledException += 
CurrentDomain_UnhandledExceptionEventHandler;

和同一个类中的事件处理程序(在第一行设置断点):

private static void CurrentDomain_UnhandledExceptionEventHandler(object sender, UnhandledExceptionEventArgs e)
{
var exception = (Exception)e.ExceptionObject;
Trace.WriteLine(exception.Message);
Trace.WriteLine(exception.StackTrace);
Trace.WriteLine(exception.InnerException.Message);
}

当代码运行时,断点未命中。但是,Visual Studio 输出窗口确实包含以下内容:

A first chance exception of type 'System.Exception' occurred in redacted.dll
A first chance exception of type 'System.Exception' occurred in mscorlib.dll

我也尝试将接线和处理程序移动到 Worker Role OnStart 方法,但仍然没有命中断点。

我根本没有使用 WebAPI,但确实查看了关于那里所做的事情的帖子,但我没有发现任何明确的地方,所以我来了。

在 .NET Framework 4.5.2、VS 2013 上运行。

感谢所有想法。谢谢。

最佳答案

尝试编写自定义中间件并将其作为第一个中间件:

public class GlobalExceptionMiddleware : OwinMiddleware
{
public GlobalExceptionMiddleware(OwinMiddleware next) : base(next)
{}

public override async Task Invoke(IOwinContext context)
{
try
{
await Next.Invoke(context);
}
catch(Exception ex)
{
// your handling logic
}
}
}

将其作为第一个中间件:

public class Startup
{
public void Configuration(IAppBuilder builder)
{
var config = new HttpConfiguration();

builder.Use<GlobalExceptionMiddleware>();
//register other middlewares
}
}

当我们将这个中间件注册为第一个中间件时,其他中间件中发生的任何异常(沿着堆栈跟踪)将向上传播并被该中间件的 try/catch block 捕获。

并不一定要把它注册为第一个中间件,如果你不需要对某些中间件进行全局异常处理,只需在这个中间件之前注册这些中间件即可。

public class Startup
{
public void Configuration(IAppBuilder builder)
{
var config = new HttpConfiguration();

//register middlewares that don't need global exception handling.
builder.Use<GlobalExceptionMiddleware>();
//register other middlewares
}
}

关于c# - OWIN/Katana 未处理的异常全局处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30918649/

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