【问题标题】:modelState.isValid not checking required decorated attributesmodelState.isValid 不检查所需的装饰属性
【发布时间】:2020-06-09 19:14:00
【问题描述】:

我在使用ModelState 验证时遇到了这个问题,因为我使用的模型的属性装饰有[Required] 属性,但它永远不会无效,即使在null 上也是如此。

这是控制器:

[HttpPost("x/{sampleString}")]
[ProducesResponseType(StatusCodes.Status303SeeOther)]
public IActionResult Post(string sampleString, SponsorContractorFilterModel model)
{
    if (!ModelState.IsValid)
        return StatusCode(BadRequest("Model sent is not valid").StatusCode.GetValueOrDefault());
    //do stuff, add location on header and send back the 303.
    return StatusCode(StatusCodes.Status303SeeOther);
}

而且模型非常简单:

public class SponsorContractorFilterModel
{
    /// <summary>
    /// Initializes a new instance of the <see cref="SponsorContractorFilterModel"/> class.
    /// </summary>
    public SponsorContractorFilterModel()
    {
    }

    /// <summary>
    /// Sponsor number.
    /// </summary>
    [Required]
    public int? AnImportantNumber { get; set; }

    public List<int> SomeIds { get; set; }
     //few more attributes not been decorated on purpose.

}

问题是,当我用邮递员发送一个没有“AnImportantNumber”或明确null 的模型对象时,在这两种情况下都表明这是无效的。当我调试它时,我可以看到它实际上映射为null

【问题讨论】:

    标签: c# validation .net-core modelstate


    【解决方案1】:

    我建议使用[BindRequired] 属性来确保请求中存在数据。文档中有No source for a model property 部分解释了一下。

    还有一篇由 Filip W. 撰写的关于该主题的旧文章 [Required] and [BindRequired] in ASP.NET Core MVC。这也可能是一个很好的起点/灵感。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-26
      • 2022-09-25
      • 2023-03-04
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多