Как я могу получить объект, который был нулевым, как (показано на рисунке) - PullRequest
0 голосов
/ 15 октября 2019

Описание исключения с аннотацией Я создаю обработчик исключений промежуточного программного обеспечения для проекта 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);
    }

Я ожидал, что свойство источника в исключении будет содержать его, но он просто показывает класс.

1 Ответ

1 голос
/ 15 октября 2019

Насколько мне известно, есть только один способ сделать то, что вы хотите: написать блок try ... catch для каждого свойства. Это просто неосуществимо.

Поиск на самом деле даже не является признаком этого исключения. Это происходит где-то в механике разрешения функций. Я, честно говоря, не уверен, что именно код его выбрасывает, но я знаю, что поиск переменной выполнил свою работу (правильно принял, сохранил и возвратил «ноль») и ни в коем случае не виноват.

нулевые значенияпрямо там с Boneheaded Исключения . Как в нем буквально упоминается. Пойдите и не допустите, чтобы это когда-либо происходило: «Искривленные исключения - ваша собственная ошибка, вы могли бы предотвратить их, и, следовательно, они являются ошибками в вашем коде. Вы не должны их ловить; это скрывает ошибку в вашем коде. Скорее выследует написать свой код так, чтобы исключение не могло произойти в первую очередь, и, следовательно, его не нужно перехватывать. Этот аргумент равен нулю , этот тип неверен, этот индекс находится вне диапазона, вы 'мы пытаемся разделить на ноль - это все проблемы, которые вы могли бы легко предотвратить, во-первых, поэтому прежде всего нужно предотвратить беспорядок, чем пытаться его очистить. "

Честно говоря, я могуна самом деле не имеет смысла этой функции. Вы пытаетесь поместить администратора в базу данных? Если так, что означает «AdminResponse» в этом контексте?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...