ModelState всегда действителен в ASP.NET.CORE 2.2 Web Api - PullRequest
2 голосов
/ 10 июня 2019

У меня есть проект веб-API Asp.Net Core 2.2. Недавно я попытался добавить проверку моделей, добавив DataAnnotation или библиотеку FluentValidation.

В моих модульных тестах я вижу, что даже при передаче недопустимых значений модели состояние модели действительно.

StartUp.cs

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
        .AddFluentValidation();

services.AddTransient<IValidator<ClientDto>, ClientValidator>();

ClientController

My Controller наследуется от ControllerBase и имеет атрибут [ApiController].

    [HttpPost]
    public async Task<IActionResult> Create([FromBody] ClientDto client)
    {

        if (!ModelState.IsValid)
            return BadRequest();

        await _clientsService.Create(client);

        var clientAdded = await _clientsService.GetCustomer(c => c.IntegralFileName == client.IntegralFileName);

        return CreatedAtAction("Create", client, clientAdded);

    }

ClientDto.cs

 public class ClientDto
{
    public string Id { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public bool Admin { get; set; }

    public bool Active { get; set; }
}

ClienValidator.cs

public class ClientValidator : AbstractValidator<ClientDto>
{
    public ClientValidator()
    {
        RuleFor(x => x.Id).NotNull();
        RuleFor(x => x.FirstName).Length(4, 20);
        RuleFor(x => x.LastName).Length(3, 20);
    }
}

Я думаю, что попробовал все, некоторые из них:

1) Удалена проверка достоверности и замените ее аннотациями данных

2) Заменить AddMcv на

   services.AddMvcCore()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
            .AddJsonFormatters()
            .AddApiExplorer()
            .AddAuthorization()
            .AddDataAnnotations()
            .AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<ClientValidator>());

Но я не вижу никакой разницы в значении ModelState. Любые идеи ??

Спасибо

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Проверка состояния модели не происходит (или правильно сказать, что привязка модели не происходит) во время модульного тестирования. В этой статье описаны некоторые способы реализации того, что вы хотите

0 голосов
/ 10 июня 2019

Попробуйте добавить атрибут к вашему Dto:

[Validator(typeof(ClientValidator))]
public class ClientDto
...