【发布时间】:2019-03-14 15:43:32
【问题描述】:
Microsoft 为ExceptionHandlerMiddleware here 提供了此示例。这是一段摘录:
app.UseExceptionHandler(errorApp =>
{
errorApp.Run(async context =>
{
...
var exceptionHandlerPathFeature = context.Features.Get<IExceptionHandlerPathFeature>();
if (exceptionHandlerPathFeature?.Error is FileNotFoundException)
{
await context.Response.WriteAsync("File error thrown!");
}
...
});
});
我不太明白他们为什么要使用?. 运算符来获取异常?可以在没有IExceptionHandlerPathFeature 的情况下触发此委托吗?没有保证访问异常的异常处理程序似乎不合逻辑。
Here 是代码,其中似乎不可能有 null。
【问题讨论】:
-
如果
IExceptionHandlerPathFeature实现无法找到一些阅读,那么它可能是null -
理论上是可能的,但它只是practice中的POCO
-
如果在
context.Features集合中没有找到exceptionHandlerPathFeature,则可能为null的不是错误 -
是的,据我所见,它可以是
null,但我目前并不完全了解这些情况。 -
在正常情况下,它永远不会为空。但是,您可以简单地实现
IWebHost非常,它会的。默认实现将具有此功能,但这并不意味着所有实现都会。除此之外,始终围绕空值进行编码只是一种好习惯。也许它永远不会为空,但有一个 潜在 为空,所以这种情况被覆盖了。这对于异常处理程序来说可能尤其重要,因为您可能会从抛出异常的处理程序本身陷入无限循环。
标签: c# exception asp.net-core .net-core