c# - 在 Web API 中重新验证模型

标签 c# validation asp.net-web-api model modelstate

我有以下字段的模型:

-Id : Required (database generated)
-Title : Required
-Status : Required
-Comments

当我运行一个帖子时:

{
"title":"WOHOO",
"status":"STATUS"
}

一切正常。但是,当我使用以下内容发帖时:

{
"title":"WOHOO"
}

我遇到了模型状态问题,因为状态是必需的。但是,在我的 post 方法中是这样的:

[Route(""), ResponseType(typeof(MyModel))]
public IHttpActionResult PostMyModel(MyModel model)
{
    // Save request in DB
    model.status = "Waiting";

    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    db.MyModels.Add(model);

    try
    {
        db.SaveChanges();
    }
    catch (DbUpdateException)
    {
        if (ModelExists(model.id))
        {
            return Conflict();
        }
        else
        {
            throw;
        }
    }

    return CreatedAtRoute("DisplayMyModel", new { id = model.id }, model);
}

我在此方法开始时设置状态,但 ModelState 在请求开始时保持原样。我可以使用 ModelState.Clear() 清除 ModelState,但是我该如何重新验证新模型?

这是在 ApiController 中。

最佳答案

处理此问题的正确方法是首先清除模型状态,然后使用新模型调用 Validate 方法。这会将任何验证错误添加到模型状态。见下文:

ModelState.Clear();
model.status = "Waiting";
Validate<MyModel>(model);

if(!ModelState.IsValid){

etc...

关于c# - 在 Web API 中重新验证模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28752715/

相关文章:

c# - Visual Studio 中构建的进度

javascript - 使用 JQuery 动态检查是否已检查多组单选按钮

Asp.Net 在上一个操作完成之前在此上下文中启动了第二个操作

c# - 从不同数据表中的一行向数据表添加一行

c# - Localhost- 打开时出现空白页

c# - 如何制作通用类型转换函数

vb.net - 有没有更干净的方法来处理文本框验证事件

ruby-on-rails-3 - 模型实例方法中的rails 3验证

javascript - webapi 后端与纯 javascript 前端,安全

c# - 从 action 属性返回 "429 Too Many Requests"