我如何获取为null的对象(如图所示)

时间:2019-10-15 14:46:28

标签: c# asp.net-core exception nullreferenceexception asp.net-core-middleware

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属性可以包含它,但它只显示类。

1 个答案:

答案 0 :(得分:1)

据我所知,只有一种方法可以完成您想要的事情: 为每个属性编写一个try ... catch块。这根本不可行。

查找实际上甚至不是此异常的源。它来自功能解析机制中的某个地方。老实说,我不确定该代码到底是在抛出它,但是我知道变量查找确实可以完成它(正确地获取,存储和返回“ null”),这绝不是错误。

空值在Boneheaded Exceptions处。正如在字面上提到的那样。去阻止它的发生:“骨头异常是您自己的糟糕错误,您可以防止它们,因此它们是代码中的错误。您不应捕获它们;这样做是在代码中隐藏了一个错误。应该编写您的代码,以使该异常不可能首先发生,因此不需要捕获。该参数为空,该类型转换是错误的,该索引超出范围,您“正试图除以零-这些都是您本可以很容易地避免的问题,所以首先要避免混乱,而不是尝试对其进行清理。”

老实说,我无法真正理解此功能。您是否正在尝试将管理员用户放入数据库?如果是这样,“ AdminResponse”在此上下文中是什么意思?