J'utilise l'attribut [EmailAddress] pour valider les e-mails côté serveur. Cependant, lorsque j'envoie une adresse e-mail non valide, je reçois une réponse de code d'état 400 sans message au lieu d'entrer dans ma méthode d'action et de voir une erreur ModelState.
La sortie de débogage indique simplement que Microsoft.AspNetCore.Mvc.SerializableError est levée.
Quelqu'un pourrait-il expliquer cela, s'il vous plaît?
Modèle:
public class LoginVm
{
[Required(ErrorMessage = "Email cannot be empty.")]
[EmailAddress(ErrorMessage = "Email has an incorrect format.")]
public string Email { get; set; }
[Required(ErrorMessage = "Password cannot be empty.")]
public string Password { get; set; }
}
Action:
[AllowAnonymous]
[HttpPost]
public IActionResult Authenticate([FromBody]LoginVm loginVm)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (loginVm.Email != "[email protected]" || loginVm.Password != "password")
{
return NotFound("There is no such user.");
}
return Ok();
}
Sortie de débogage:
Demande:
POST http://localhost:58072/api/accounts HTTP/1.1
Host: localhost:58072
Connection: keep-alive
Content-Length: 47
Accept: application/json, text/plain, */*
Origin: https://localhost:44381
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Content-Type: application/json
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
{"email":"wrongemail","password":"wrongpassword"}
Le [ApiController]
l'attribut fournit réponses HTTP 400 automatiques .
[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
Les erreurs de validation déclenchent automatiquement une réponse HTTP 400. Le code suivant devient inutile dans vos actions:
if (!ModelState.IsValid) { return BadRequest(ModelState); }
Comment désactiver cette fonction
public void ConfigureServices(IServiceCollection services)
{
...
services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
...
}