【发布时间】:2018-01-19 12:30:07
【问题描述】:
我创建了一个 OwinMiddleware 来捕获我的 api 请求中所有未处理的异常。
public class UnhandledExceptionMiddleware : OwinMiddleware
{
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
public UnhandledExceptionMiddleware(OwinMiddleware next) : base(next)
{ }
public override async Task Invoke(IOwinContext context)
{
try
{
await Next.Invoke(context);
}
catch (Exception ex)
{
logger.Fatal(ex, ex.Message);
}
}
}
但是,如果我在控制器函数中抛出一些错误,则不会使用 catch 块,并且在这个中间件中似乎一切都很好。为什么我的 catch 块没有被使用?
更新
这是我的 Owin 配置。调用方法仅在 catch 不起作用时起作用
public void Configuration(IAppBuilder app)
{
// Enables use of spatial data types
SqlServerTypes.Utilities.LoadNativeAssemblies(HostingEnvironment.MapPath("~/bin"));
HttpConfiguration config = new HttpConfiguration();
IContainer container = AutoFacConfig.Register(config, app);
app.UseApplicationInsights();
app.UseNLog();
app.Use<UnhandledExceptionMiddleware>();
【问题讨论】:
-
可能是它在管道中的顺序。也是过去让我绊倒的事情。 docs.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/…
-
您能展示一下您是如何设置 Owin 管道的吗?
标签: c# asp.net-web-api owin