【问题标题】:Should Web API return 403 Forbidden or not have an endpoint at all?Web API 应该返回 403 Forbidden 还是根本没有端点?
【发布时间】:2019-12-20 09:00:25
【问题描述】:

我有一个 Web API,对于一个模型,我只允许通过 id [GET] api/models/{modelId} 或更新 [PUT] api/models/{modelId} 获取。 API 不支持POSTDELETE 或获取集合([GET] api/models)。

还应该在Controller 中有这些方法并返回Forbid() 403 状态吗?

或者我应该简单地删除这些方法?

【问题讨论】:

  • 如果它们不受支持,则根本不要包含它们
  • 501 Not Implemented怎么样
  • 或如果服务器确实识别了该方法,但故意不支持它,则适当的响应是405 Method Not Allowed
  • 使用 .Net Core,如果您尝试使用不允许的 HTTP 动词 POST 到任何已知路由,无论如何您都会收到 405 Method Not Allowed 响应。所以在这种情况下,如果你POST api/models/{modelId},你会得到一个405

标签: c# asp.net-core asp.net-web-api url-routing asp.net-core-webapi


【解决方案1】:

HTTP response status codes 的完整列表可以帮助您确定最合适的响应。

403 Forbidden 不符合您描述的情况:

客户端没有内容的访问权限;也就是说,它是未经授权的,因此服务器拒绝提供所请求的资源。与 401 不同,客户端的身份是服务器知道的。

另一方面,405 Method Not Allowed 似乎适合这种情况:

请求方法为服务器所知,但已被禁用,无法使用。例如,API 可能禁止删除资源。 GETHEAD 这两个强制方法绝不能被禁用,并且不应返回此错误代码。

Note:

服务器必须在 405 响应中生成一个 Allow 标头字段,其中包含目标资源当前支持的方法列表。

【讨论】:

  • 谢谢!我只想在我的问题下引用@Matt U 评论:“使用 .Net Core,如果您尝试使用不允许的 HTTP 动词 POST 到任何已知路由,无论如何您都会得到 405 Method Not Allowed 响应" 也就是说,我只是从Controller中删除了这些方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 2023-02-24
  • 1970-01-01
  • 2017-05-15
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
相关资源
最近更新 更多