Как автоматически вернуть код ошибки 404 Not Found WEB API CORE - PullRequest
1 голос
/ 12 июля 2020

Привет, я хотел бы знать, есть ли способ автоматически вернуть Not Found (), если объект имеет значение null

Например, вставка этого

User user = _userService.GetUserById(int id);

if(user is null)
  return Not FOund();

return Ok(user);

Я хотел бы сделать это this

User user = _userService.GetUserById(int id);

return Ok(user);

И автоматически получить нулевой объект и код состояния 404. Есть ли способ реализовать это?

1 Ответ

0 голосов
/ 13 июля 2020

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

Вы можете создать глобальный фильтр действий для проверки значения OKobejctResult, если значение равно null, тогда вы можете изменить результат контекста.

Подробнее, вы можете обратиться к кодам ниже:

Создать класс фильтра:

public class TestActionFilter : IActionFilter
{
     
    public void OnActionExecuted(ActionExecutedContext context)
    {

        if (context.Result.GetType() == typeof(OkObjectResult))
        {
            if (((OkObjectResult)context.Result).Value == null)
            {
                context.Result = new NotFoundResult();
            }
        }

    }

    public void OnActionExecuting(ActionExecutingContext context)
    {

        //throw new NotImplementedException();
    }
}

Зарегистрируйте его в методе ConfigureServices startup.cs:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers(options => options.Filters.Add(typeof(TestActionFilter)));
    }

Тогда все будет хорошо.

Действие моего тестового контроллера:

    [HttpPost]
    public IActionResult CreateImage(string base64image)
    {
        WeatherForecast ew = null;

        return Ok(ew);

    }

Результат:

введите описание изображения здесь

...