区分来自web api的相同状态代码中的消息

时间:2017-09-01 06:50:07

标签: rest api asp.net-web-api http-status-code-403

我正在开发一个Web API,它会因多种原因返回Forbidden http状态 -

  • 用户被阻止。
  • IP被阻止。
  • 超出了请求限制。
  • 用户未经验证。

我将以下列方式回复 -

return Content(HttpStatusCode.Forbidden, message);    //message : "Limit reached" etc.

现在,我需要在客户端以不同的方式处理这些原因。我应该从退回的消息中找出原因吗?此消息将显示给用户,并可能在将来更改。

最佳做法是什么?

2 个答案:

答案 0 :(得分:0)

您的错误消息应该是您客户的描述。理想情况下,您需要包含以下信息:

  1. 开发者留言(技术说明 - " cache is out-of-date"," service A is unavailable")
  2. 人类可读的讯息(业务说明 - " this time is booked already"," company A is closed and cannot be modified")
  3. 提示如何解决(" refresh your cache"," try again in 5 minutes"," request permission A from administrator")
  4. href到您的在线文档
  5. 标题为" error_code: 100"。还应在文档中描述自定义代码。您可以依赖客户的代码并妥善处理
  6. 你的意思是:

      

    用户未经验证。

    如果用户未经过身份验证(api不知道是他),api应该返回401 http状态代码。如果用户缺少某些权限,因此无法修改资源,403完全正常。但是,描述哪些权限确实缺失会很棒

答案 1 :(得分:0)

  

最佳做法是什么?

您应该寻找标准化的内容,例如Problem Details for HTTP APIs,而不是尝试发明自己的模式。

问题详情描述了一个人类可读的标题"和"细节"字段和"类型"这是人类可读文档的链接。

  

消费者必须使用"类型" string作为问题类型的主要标识符; "标题" string是建议性的,仅包括那些不了解URI语义且无法发现它们的用户(例如,离线日志分析)。消费者不应自动取消引用类型URI。

     

消费者不应该解析"细节"信息成员; extensions更适合获取此类信息且不易出错的方式。