C# “返回什么http状态码?”;无效状态更改“;

C# “返回什么http状态码?”;无效状态更改“;,c#,rest,asp.net-core,C#,Rest,Asp.net Core,这是一个关于最佳REST实践的问题。 考虑下面的控制器,它有一个更新应用程序对象的方法 public ApplicationController : Controller { private readonly ApplicationService _applicationService; public ApplicationController(ApplicationService applicationService) { _applicationServ

这是一个关于最佳REST实践的问题。 考虑下面的控制器,它有一个更新应用程序对象的方法

public ApplicationController : Controller
{
    private readonly ApplicationService _applicationService;
    public ApplicationController(ApplicationService applicationService)
    {
       _applicationService = applicationService;
    }

    [HttpPost]
    public IActionResult Post([FromBodey] Application application)
    {
         var previousApplication = _applicationService.Get(applicationId)
         if(application.State == ApplicationState.Approved
             && apreviousApplcation.State != ApplicationState.Pending)
         {
              return StatusCode(*what code here*, "State have to be pending to goto approved");
         }

         _applicationSerivce.Update(application);
        return Ok();
    }
}
如果无法将应用程序的状态更改为新状态,那么最好返回什么状态代码

请查看第3级部分


Fowler使用409冲突标题表示出现了问题。

不太容易。我建议用400英镑加正文。它实际上不是一个资源,更像是一个验证。来自MDN:“HTTP 400错误请求-响应状态代码表明,由于无效语法,服务器无法理解请求。客户端不应在未经修改的情况下重复此请求。”(我的重点)我的案例不是无效的syntaxTrue,但据我所知,没有针对验证程序错误的响应代码,这将始终是一个折衷方案。“442不可处理实体”是另一个选项。谢谢你的回复。我觉得在REST实现中尽量利用http状态代码时,很容易出现歧义。如果你把你的评论转换成一个答案,我可以把它标记为接受。回答这个问题似乎没有太大的竞争:)嗯,我对409的理解是它与并发检查有关。但似乎没有确切的模式可以遵循。。。