.NET CORE API: Можно ли условно проверить модель в зависимости от глагола http, используемого для ее отправки? - PullRequest
0 голосов
/ 31 мая 2019

Я очень плохо знаком с FluentValidation, и я хотел бы проверить свою модель различными способами в зависимости от того, какой глагол был использован для ее отправки.

Учитывая очень простой класс, я хотел быигнорируйте свойство ID на POST, но убедитесь, что оно предоставлено на PUT.Это то, что FluentValidation может сделать?

 public class CategoryModel
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

Я предполагаю, что мне нужно передать HttpContext валидаторам, чтобы я мог определить используемый метод http, но я не хочу повторно-изобрести колесо, если оно уже встроено.

Спасибо !!

1 Ответ

0 голосов
/ 31 мая 2019

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

public class CategoryModel
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    }


public class CategoryModelValidator : AbstractValidator<CategoryModel>
    {
        public CategoryModelValidator(IHttpContextAccessor context)
        {
            if (context.HttpContext.Request.Method == HttpMethods.Post)
                RuleFor(x => x.ID).Empty();

            if (context.HttpContext.Request.Method == HttpMethods.Put)
                RuleFor(x => x.ID).NotEmpty();

            RuleFor(x => x.Name).Length(1, 30);
        }
    }

Передача контекста была проще, чем я думал. Все, что мне нужно было сделать, это зарегистрировать его в моем методе ConfigureServices с помощью services.AddHttpContextAccessor(), а DI позаботится обо всем остальном.

Если честно, это довольно удобный инструмент проверки

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