在没有足够权限的情况下,为了响应删除资源的请求而在rest API中引发的Correct Exception是什么?

问题描述 投票:1回答:2

我正在使用ASP.net Core和bit-framework创建一个rest API 我们希望允许客户端只删除他们自己创建的资源

Questions:

如果客户端要求删除由另一个客户端创建的资源,

  1. 在API中提出的最佳例外是什么?
  2. 要返回的最正确的HTTP状态代码是什么?
  3. Bit.Owin.Exceptions命名空间中实现的所有异常都是:\ BadRequestException ResourceNotFoundException AppException DomainLogicException 我应该在我的API中坚持这个例外列表吗?这个例外列表是否包括更多例外以涵盖更多场景?

  1. 我认为必须返回其中一个状态代码,但哪一个更适合我们的条件?: 403禁止 405不允许 409资源冲突
asp.net-core http-status-codes bit-framework
2个回答
1
投票

基于@cassiomolin's answer,您可以根据以下文档创建自己的异常类型:

https://docs.bit-framework.com/introduction/web-api#exception-handling

add exception type to bit framework known exceptions

public class CanNotDeleteOtherClientResourceException : Exception, IKnownException, IHttpStatusCodeAwareException
{
    public CanNotDeleteOtherClientResourceException(string message)
        : base(message)
    {
    }

    public HttpStatusCode StatusCode { get; set; } = HttpStatusCode.Forbidden;
}

3
投票

我不熟悉你正在使用的框架。但是,让我给你2美分。从API消费者的角度来看,403状态代码对于您的问题中描述的情况似乎是一个非常合理的选择:

6.5.3. 403 Forbidden

403(Forbidden)状态代码表示服务器理解请求但拒绝授权。希望公开请求被禁止的服务器可以在响应有效负载中描述该原因(如果有的话)。 [...]

或者,如果您打算隐藏资源的存在,则抛出映射到404的异常:

希望“隐藏”当前存在的禁止目标资源的源服务器可以用状态代码404(未找到)进行响应。

© www.soinside.com 2019 - 2024. All rights reserved.