我在想412(前提条件失败),但可能有更好的标准?
根据规范,状态422似乎最合适.
422(不可处理实体)状态代码表示服务器理解请求实体的内容类型(因此415(不支持的媒体类型)状态代码是不合适的),并且请求实体的语法是正确的(因此400(错误请求) )状态代码不合适)但无法处理包含的指令.例如,如果XML请求主体包含格式正确(即语法正确)但语义错误的XML指令,则可能发生此错误情况.
他们声称格式错误的xml是一个错误语法的例子(调用400).格式错误的查询字符串似乎与此类似,因此400似乎不适合缺少参数的格式良好的查询字符串.
UPDATE @DavidV正确地指出此规范适用于WebDAV,而不是核心HTTP.但是一些流行的非WebDAV API无论如何都使用422,因为缺少更好的状态代码(参见本文).
我不确定是否有固定标准,但我会使用400 Bad Request
:
由于语法格式错误,服务器无法理解请求.客户端不应该在没有修改的情况下重复请求.
当使用webHttpBinding时,.NET中的WCF API通过返回HTTP 404
"未找到端点"错误来处理缺少的参数.
404 Not Found
如果您将Web服务方法名称与其参数签名一起考虑,则可能有意义.也就是说,如果您公开Web服务方法LoginUser(string, string)
并请求LoginUser(string)
,则找不到后者.
基本上这意味着无法找到您正在调用的Web服务方法以及您指定的参数签名.
10.4.5 404未找到
服务器未找到与Request-URI匹配的任何内容.没有说明该病症是暂时的还是永久性的.
的400 Bad Request
,因为格特建议,仍然是一个有效的响应代码,但我认为这是通常用于指示下级的问题.它可以很容易地被解释为格式错误的HTTP请求,可能缺少或无效的HTTP标头,或类似的.
10.4.1 400错误请求
由于语法格式错误,服务器无法理解请求.客户端不应该在没有修改的情况下重复请求.
在我们的一个API项目中,我们决定将409状态设置为某个请求,因为缺少参数,我们无法将其完全填充为100%.
HTTP状态代码"409 Conflict"对我们来说是一个很好的尝试,因为它的定义需要包含足够的信息以便用户识别冲突的来源.
参考:w3.org/Protocols/
因此,在400或404之类的其他响应中,我们选择409强制需要查看请求中的某些注释,这有助于设置新的正确请求.
我们的情况是特别的,因为如果请求不完全正确,我们需要发送一些数据,我们需要强制客户端查看消息并了解请求中的错误.
一般来说,如果我们只有一些缺失的参数,我们会得到一个400和一个缺失参数数组.但是当我们需要发送更多信息时,比如特定的案例信息,我们希望更加确定客户会处理它,我们发送409
您可以发送400 Bad Request代码.它是更通用的4xx状态代码之一,因此您可以使用它来表示您的意图:客户端发送的请求缺少应用程序所需的信息/参数,以便正确处理它.
我通常会选择422(不可处理的实体),如果所需参数中的某些内容与API端点所需的内容不匹配(如密码太短),但对于缺少的参数,我会选择406(不可接受).