C# “返回什么http状态码?”;无效状态更改“;
这是一个关于最佳REST实践的问题。 考虑下面的控制器,它有一个更新应用程序对象的方法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
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的理解是它与并发检查有关。但似乎没有确切的模式可以遵循。。。