Skip to main content
 首页 » 编程设计

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

2024年01月26日30傻小

我有以下字段的模型:

-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...