Exception Description with annotation 我正在为ASP.NET Core项目创建中间件异常处理程序,并且试图获取异常的来源(如引起该异常的对象一样)。使用调试器时可以看到该对象,但无法以编程方式获取它。
public class ErrorHandlingMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger<ErrorHandlingMiddleware> _logger;
public ErrorHandlingMiddleware(RequestDelegate next, ILogger<ErrorHandlingMiddleware> logger)
{
_next = next;
_logger = logger;
}
public async Task Invoke(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception ex)
{
await HandleExceptionAsync(context, ex);
}
}
private Task HandleExceptionAsync(HttpContext context, Exception ex)
{
_logger.LogError(ex, ex.Message);
var code = HttpStatusCode.InternalServerError; // 500 if unexpected
var result = JsonConvert.SerializeObject(new { Error = ex.Message, Soure = ex.Source });
context.Response.ContentType = "application/json";
context.Response.StatusCode = (int)code;
return context.Response.WriteAsync(result);
}
我希望异常中的source属性可以包含它,但它只显示类。
答案 0 :(得分:1)
据我所知,只有一种方法可以完成您想要的事情: 为每个属性编写一个try ... catch块。这根本不可行。
查找实际上甚至不是此异常的源。它来自功能解析机制中的某个地方。老实说,我不确定该代码到底是在抛出它,但是我知道变量查找确实可以完成它(正确地获取,存储和返回“ null”),这绝不是错误。
空值在Boneheaded Exceptions处。正如在字面上提到的那样。去阻止它的发生:“骨头异常是您自己的糟糕错误,您可以防止它们,因此它们是代码中的错误。您不应捕获它们;这样做是在代码中隐藏了一个错误。应该编写您的代码,以使该异常不可能首先发生,因此不需要捕获。该参数为空,该类型转换是错误的,该索引超出范围,您“正试图除以零-这些都是您本可以很容易地避免的问题,所以首先要避免混乱,而不是尝试对其进行清理。”
老实说,我无法真正理解此功能。您是否正在尝试将管理员用户放入数据库?如果是这样,“ AdminResponse”在此上下文中是什么意思?