Mak*_*hyn 9 .net c# asp.net asp.net-mvc .net-core
我使用[EmailAddress]属性来验证服务器端的电子邮件.但是,当我发送无效的电子邮件地址时,我会收到400状态代码响应而没有消息,而不是进入我的操作方法并看到ModelState错误.
调试输出只是说抛出了Microsoft.AspNetCore.Mvc.SerializableError.
请问有人解释一下吗?
模型:
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; }
}
Run Code Online (Sandbox Code Playgroud)
行动:
[AllowAnonymous]
[HttpPost]
public IActionResult Authenticate([FromBody]LoginVm loginVm)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (loginVm.Email != "maksym@no.no" || loginVm.Password != "password")
{
return NotFound("There is no such user.");
}
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
调试输出:
请求:
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"}
Run Code Online (Sandbox Code Playgroud)
spo*_*ahn 20
该[ApiController]属性提供自动HTTP 400响应.
[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
Run Code Online (Sandbox Code Playgroud)
验证错误会自动触发HTTP 400响应.您的操作中不再需要以下代码:
Run Code Online (Sandbox Code Playgroud)if (!ModelState.IsValid) { return BadRequest(ModelState); }
如何关闭此功能
public void ConfigureServices(IServiceCollection services)
{
...
services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5877 次 |
| 最近记录: |