Перейти к содержанию

Создание фильтров для приложения

Разберем каждый из шести типов фильтров.
Для этого будем рефакторить веб-апи контроллер для приложения из предыдущей главы. Вот его начальный код:

[Route("api/recipe")]
public class RecipeApiController : ControllerBase
{
    private const bool IsEnabled = true;
    public RecipeService _service;
    public RecipeApiController(RecipeService service)
    {
        _service = service;
    }

    [HttpGet("{id}")]
    public IActionResult Get(int id)
    {
        if (!IsEnabled) { return BadRequest(); }
        try
        {
            if (!_service.DoesRecipeExist(id))
            {
                return NotFound();
            }
            var detail = _service.GetRecipeDetail(id);
            Response.GetTypedHeaders().LastModified = detail.LastModified;
            return Ok(detail);
        }
        catch (Exception ex)
        {
            return GetErrorResponse(ex);
        }
    }

    [HttpPost("{id}")]
    public IActionResult Edit(int id, [FromBody] UpdateRecipeCommand command)
    {
        if (!IsEnbabled) { return BadRequest(); }
        try
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
            if (!_service.DoesRecipeExist(id))
            {
                return NotFound();
            }
            _service.UpdateRecipe(command);
            return Ok();
        }
        catch(Exception ex)
        {
            return GetErrorResponse(ex);
        }
    }

    private static IActionResult GetErrorResponse(Exception ex)
    {
        var error = new ProblemDetails
        {
            Title = "An error occured",
            Detail = ex.Message,
            Status = 500,
            Type = "https://httpstatuses.com/500"
        };
        return new ObjectResult(error) { StatusCode = 500 };
    }
}

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

Фильтры авторизации: защита API

Фильтры ресурсов: прерывание выполнения методов действий

Фильтры действий: настройка привязки модели и результатов действий

Фильтры исключений: собственная обработка исключений для методов действий

Фильтры результатов: настройка результатов действий перед их выполнением

Есть еще один тип фильтров, применяющийся только к Razor Pages

Фильтры страниц: настройка привязки модели для Razor Pages


Последнее обновление : 3 октября 2022 г.
Дата создания : 3 октября 2022 г.

Комментарии

Комментарии