UseExceptionHandler не работает с ExceptionHandlingPath - PullRequest
0 голосов
/ 29 мая 2020

В приложении Asp. Net Core Mvc с использованием. Net Core 3.0 я пытаюсь настроить глобальную обработку исключений с помощью app.UseExceptionHandler ("/ Error / Show"), но ошибка Контроллер никогда не попадает.

Если я использую:

public void Configure(
        IApplicationBuilder app,
        IWebHostEnvironment env,
        ILoggerFactory loggerFactory,
        IDataAccess dataAccess,
        IHttpContextAccessor httpContextAccessor)
{
    app.UseExceptionHandler("/Error/Show");
    ...
}

Контроллер ошибок показывает Действие никогда не срабатывает, как и конструктор контроллера ошибок.

Если я изменю код на:

public void Configure(
        IApplicationBuilder app,
        IWebHostEnvironment env,
        ILoggerFactory loggerFactory,
        IDataAccess dataAccess,
        IHttpContextAccessor httpContextAccessor)
{
    app.UseExceptionHandler(new ExceptionHandlerOptions
    {
        ExceptionHandler = async context =>
        {
            await context.Response.WriteAsync(Newtonsoft.Json.JsonConvert.SerializeObject(new
            {
                title = "An Error Occurred",
                message = "The error was caught by UseExceptionHandler"
            }));
        }
    });
    ...
}

Ожидаемый ответ возвращается, но я бы действительно хотел использовать ExceptionHandlingPath, чтобы я мог вернуть json, если запрос был сделан с использованием ajax и бритвы, если запрос был стандартным Get.

Я также пробовал использовать:

app.UseExceptionHandler(new ExceptionHandlerOptions
{
    ExceptionHandlingPath = "/Error/Show"
});

, но это ведет себя так же, как app.UseExceptionHandler ("/ Error / Show")

Есть идеи, почему ExceptionHandlingPath не будет работать, но ExceptionHandler будет работать так, как ожидалось?

Ответы [ 2 ]

0 голосов
/ 02 июня 2020

Оказывается, проблема заключалась в том, что попытка ввести IExceptionHandlerPathFeature в контроллер ошибок вызвала молчаливый сбой ExceptionHandler. После удаления параметра IExceptionHandlerPathFeature из конструктора Error Controller обработчик начал работать должным образом.

public async Task<IActionResult> Show()
{
  var exceptionHandlerPathFeature = HttpContext.Features.Get<IExceptionHandlerPathFeature>();
}
0 голосов
/ 01 июня 2020

настроить глобальную обработку исключений с помощью app.UseExceptionHandler ("/ Error / Show"), но контроллер ошибок никогда не срабатывает.

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

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseExceptionHandler("/Error/Show");  

    app.UseStaticFiles();

    app.UseRouting();


    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");

    });
}

Error контроллер и Show действие

public class ErrorController : Controller
{
    public IActionResult Show()
    {
        return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
    }
}

Результат теста

enter image description here

Чтобы устранить проблему, попробуйте:

1) убедитесь, что вы создали соответствующее действие контроллера "/Error/Show" и просмотрите

2 ) проверьте, включена ли страница исключений разработчика app.UseDeveloperExceptionPage();

3) проверьте, не добавлены ли другие промежуточные программы / фильтры, которые вызывают проблему.

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