ASP.NET Core Web API:为什么需要在Get请求中使用ModelState验证?

问题描述:

VS 2015年自动生成以下代码:ASP.NET Core Web API:为什么需要在Get请求中使用ModelState验证?

// GET: api/Companies/5 
[HttpGet("{id}")] 
public async Task<IActionResult> GetCompany([FromRoute] int id) 
{ 
    if (!ModelState.IsValid) 
    { 
     return BadRequest(ModelState); 
    } 

    Company company = await _context.Companies.SingleOrDefaultAsync(m => m.Id == id); 

    if (company == null) 
    { 
     return NotFound(); 
    } 

    return Ok(company); 
} 

什么是这里的ModelState验证的意义呢?

我假设你使用了Web Api模板。由于您没有从“空白”模板开始,所以VS生成的代码是Microsoft团队认为的“良好实践”。

问题是,如果您希望某个字段包含电子邮件,需要另一个字段等等,您可能会用数据注释标记它们。现在,在你的方法被执行之前还有一些额外的检查(对于一个简单的int来说是不必要的,但这意味着你可能会改变参数)。有关更多信息,请参阅this文章。

如果您发现这些添加不必要,您可以随时从Empty模板启动项目。