У меня есть проект веб-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.
Любые идеи ??
Спасибо