ExceptionFilter не запускается. NET Core Web Api - PullRequest
1 голос
/ 11 февраля 2020

У меня проблема с фильтрами действий. Ни один из моих фильтров не работает. Я использую. NET Core 2.2 и собираю Web Api. Я зарегистрировал его с помощью [CustomExceptionFilter] в контроллере:

[HttpDelete("{id}")]
[CustomExceptionFilter]
public IActionResult Delete(int id)
        {
                var piano = _repository.GetPianoById(id);
                if (piano == null) throw new Exception(); 
                _repository.Delete(id);
                return Ok();
        }

Вот мой фильтр исключений:

using System.Web.Http.Filters;

public class CustomExceptionFilter : ExceptionFilterAttribute
{
    public override void OnException(HttpActionExecutedContext actionExecutedContext)
    {
        HttpStatusCode status = HttpStatusCode.InternalServerError;
        String message = String.Empty;
        var exceptionType = actionExecutedContext.Exception.GetType();
        if (exceptionType == typeof(Exception))
        {
            message = "Incorrect ID.";
            status = HttpStatusCode.NotFound;
        }

        actionExecutedContext.Response = new HttpResponseMessage()
        {
            Content = new StringContent(message, System.Text.Encoding.UTF8, "text/plain"),
            StatusCode = status
    };
        base.OnException(actionExecutedContext);
}

Что может быть не так?

1 Ответ

1 голос
/ 11 февраля 2020

Я не уверен, что не так с вашим примером, но вот как я это сделал.

Сначала фильтр исключений:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;

public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
{
    public override void OnException(ExceptionContext context)
    {

Затем я добавляю фильтр к весь контроллер, а не просто действие, хотя это тоже может сработать - я никогда не пробовал:

[ServiceFilter(typeof(CustomExceptionFilterAttribute))]
public class MyController : ControllerBase
{

А в Startup.cs, ConfigureServices, добавить поддержку DI:

services.AddScoped<CustomExceptionFilterAttribute>();

Этот блог более подробно описан.

...