在Web API中重新验证模型

ste*_*ris 1 c# validation model modelstate asp.net-web-api

我有以下字段的模型:

-Id : Required (database generated)
-Title : Required
-Status : Required
-Comments
Run Code Online (Sandbox Code Playgroud)

当我运行一个帖子给出这个:

{
"title":"WOHOO",
"status":"STATUS"
}
Run Code Online (Sandbox Code Playgroud)

一切都运行良好.但是,当我使用以下内容运行帖子时:

{
"title":"WOHOO"
}
Run Code Online (Sandbox Code Playgroud)

我得到模型状态问题因为状态是必需的.但是,在我的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);
}
Run Code Online (Sandbox Code Playgroud)

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

这是在ApiController中.

ste*_*ris 6

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

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

if(!ModelState.IsValid){

etc...
Run Code Online (Sandbox Code Playgroud)