.net core 3.0 app.UseExceptionHandler не достигает точки останова в методе Error - PullRequest
0 голосов
/ 01 ноября 2019

Я программирую веб-API .net core 3.0 и пытаюсь настроить глобальную обработку ошибок. Согласно документации это должно быть простой задачей, но я не могу заставить ее работать. Мой метод Error, который я должен перенаправить, никогда не достигнет точки останова, которую я установил в нем, когда я генерирую исключениеНе могли бы вы показать мне, что я делаю неправильно и как получить точку останова в моем методе Error?

Вот мой код:

// startup.cs

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{

    app.UseHttpsRedirection();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });

    app.UseExceptionHandler("/System/Error");
    app.UseStatusCodePages();
    app.UseStatusCodePagesWithReExecute("/system/error/{0}");

}

// SystemController.Error method

public IActionResult Error(
    [Bind(Prefix = "id")] int statusCode = 0
            )
{
    // break point never hits here and I want it to
    var exceptionFeature = HttpContext.Features.Get<IExceptionHandlerPathFeature>();
    if (exceptionFeature != null)
    {
        // Get which route the exception occurred at   
        string routeWhereExceptionOccurred = exceptionFeature.Path;
        // Get the exception that occurred   
        Exception exceptionThatOccurred = exceptionFeature.Error;
        // TODO: Do something with the exception   
        // Log it with Serilog?   
    }
        return View();
}

1 Ответ

0 голосов
/ 05 ноября 2019

Нашел проблему и решение.

Проблема: изначально я нажимал f5 внутри vs в моем проекте web api для запуска в режиме отладки. В URL-адресе веб-браузера, который показывал, я бы поставил параметры для метода контроллера и отправил его на мой контроллер. В результате этой процедуры отладчик сломался в том месте, где я выдал ошибку, и не сломался в точке прерывания, которая была у меня в методе глобальной ошибки.

Решение: Я получил это, чтобы работать нормально, используя внешний инструмент тестирования, например, бессонницу или почтальона, для тестирования вызова веб-API. Я нажал клавишу f5, чтобы запустить проект web api в режиме отладки из Visual Studio, затем перешел в бессонницу и отправил сообщение в метод контроллера, и он сломался в методе глобальной ошибки в моей точке останова. Таким образом, вы должны использовать внешний клиент, чтобы поразить ваш контроллер, чтобы точка прерывания была достигнута в вашем методе глобальной ошибки.

...