【问题标题】:.NET Core ModelState Validation after setting properties设置属性后的.NET Core ModelState Validation
【发布时间】:2018-06-23 18:55:52
【问题描述】:

我在 .NET Core 中有一个 Web API 控制器。我正在发布数据以保存新的 comment 模型,并且我的 AuthorID 属性在模型上具有 [Required] 数据注释。

我在保存之前在控制器中设置了AuthorID。但是,ModelState 总是返回说明 AuthorID 字段是必需的。

我如何保持对模型的验证到位并在这种情况下正确验证?

public async Task<IActionResult> PostComment([FromBody] Comment comment)
{
    comment.AuthorID = Utilities.GetUserId(this.User);
    comment.CreatedAt = DateTime.Now;

    if (!ModelState.IsValid) {
        ....

【问题讨论】:

标签: asp.net asp.net-web-api asp.net-core modelstate


【解决方案1】:

-您可以使用 TryValidateModel() 但首先您需要清除模型状态,然后再次重新验证模型 ASP.NET MVC TryValidateModel() Issues when Model is Modified

 public async Task<IActionResult> PostComment([FromBody] Comment comment)
    {

        comment.AuthorID = Utilities.GetUserId(this.User);
        comment.CreatedAt = DateTime.Now;

        ModelState.Clear();

        if (!TryValidateModel(comment)) // the same as !ModelState.IsValid
        {
            //Failure 
        }
        //Success 
    }

【讨论】:

    【解决方案2】:

    创建一个 ViewModel 并将其传递给您的 Controller Post

    public async Task<IActionResult> PostComment([FromBody] CommentModel comment) 
    {}
    

    关于您需要 AuthorID 的其他逻辑,为此创建另一个 ViewModel, 为什么你决定只依赖一个模型来处理所有事情!

    【讨论】:

      【解决方案3】:

      您可以使用

      删除 ModelState 验证
      ModelState.Remove("AuthorID")
      

      【讨论】:

      • 有没有办法做到这一点并保持验证?在此示例中,AuthorID 可能为 null,在这种情况下,我希望验证失败。我总是可以单独编写它,但理想情况下,我希望 ModelState 在我设置好之后使用 AuthorID 进行验证。
      • 您的 AuthorID 在模型中是否可以为空?
      猜你喜欢
      • 2019-11-12
      • 2019-11-02
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 2023-03-06
      相关资源
      最近更新 更多