更正HTTP动词以用于Web API中的业务规则验证端点

时间:2018-10-26 06:02:44

标签: rest asp.net-web-api asp.net-web-api2 asp.net-core-webapi

我有以下Web API控制器。它的唯一责任是根据一组业务规则验证传入的文档并返回结果。哪个正确的HTTP动词可用于此控制器操作?

//[Http<???>]
public IActionResult ValidateBusinessRules([FromBody BusinessDocument document)
{
  var result = ValidateBusinessRules(document);
  return Ok(result);
}

3 个答案:

答案 0 :(得分:1)

[FromBody]明确地告诉模型绑定器检查请求正文以绑定数据。而且由于只有某些请求允许主体,所以这意味着它可以与POST或PUT一起使用。

POST将是在这种情况下使用的默认动词。考虑到模型状态,动作看起来像这样

[HttpPost]
public IActionResult ValidateBusinessRules([FromBody] BusinessDocument document) {
    if(ModelState.IsValid) {
        var result = ValidateBusinessRules(document);            
        if(result.IsValid) { //assuming result has a flag
            return Ok(result);
        }
        return BadRequest(result);//assuming result provides relevant details.
    }
    return BadRequest(ModelState);
}

这样,响应状态可以提供有关所提出请求的一些相关反馈。

答案 1 :(得分:0)

有人可能会认为 POST 仅应用于创建新实体,但由于 GET 并非旨在通过请求正文和其他动词发送数据(< em> PUT =更新实体, Delete =删除实体)没有给您更好的选择,我想在您遇到的情况下使用 POST 是可以的需要从服务器获取一些数据,并且需要在请求正文中发送数据。

因此,我建议您在此处使用 POST

[HttpPost]
public IActionResult ValidateBusinessRules([FromBody] BusinessDocument document)
{
  var result = ValidateBusinessRules(document);
  return Ok(result);
}

答案 2 :(得分:0)

如果您使用此端点来验证表单中的数据,然后想通过另一个端点保存它们,那么我认为最好的解决方案是这样的:

    [HttpPost]
    [Route("documents")]
    public IActionResult ValidateBusinessRules([FromBody] BusinessDocument document)
    {

        var result = ValidateBusinessRules(document);
        if (!result.IsValid)
        {
            return BadRequest(result);
        }

        var document = _documentService.Save(document);
        return Ok(document);
    }

对我来说,如果您不想创建新资源,那么使用POST是很奇怪的。