HTTP GET 控制器操作和 ModelState.IsValid

问题描述 投票:0回答:2

多年来我读过的有关 ASP.NET MVC 的几乎所有文献都将 ModelState.IsValid 描述为仅在 HTTP POST 操作方法中发挥作用的东西。我理解这是惯例,但假设在涉及模型绑定的 HTTP GET 操作方法中也分配了 ModelState.IsValid,并且应该根据需要进行检查。有谁能确认一下吗?

asp.net asp.net-mvc model-binding
2个回答
5
投票

请读者注意,该问题与“更新”无关。

ModelState.IsValid
与验证属性并不严格相关。

对于正在寻找简单问题的简单答案的读者,我已在调试器中确认它是“是” -

ModelState.IsValid
为 GET 和 POST 请求设置。因此,在这两种情况下都应该显式检查,因为当验证错误(例如将值“1,000”分配给小数时)不会引发异常?出现(请参阅上面我的评论)。


0
投票

ModelState.IsValid 已应用,甚至对于 GET 也很有用。

[HttpGet]
[Route("foo")]
public async Task<IActionResult> [FromQuery, Range(1, 200)] int limit = 200)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
    ...
}
    

执行 get 请求 /foo?limit=300 会产生包含以下内容的 BadRequest。

{
    "limit": [
        "The field limit must be between 1 and 200."
    ]
}
© www.soinside.com 2019 - 2024. All rights reserved.