常见的错误响应和代码

OneDrive API 中的错误使用标准 HTTP 状态代码和 JSON 错误响应对象进行返回。 应使用以下 HTTP 状态代码。

状态代码 状态消息 说明
400 错误的请求 (Bad Request) 无法处理请求,因为格式有误或者不正确。
401 未经授权 (Unauthorized) 资源所需的身份验证信息缺少或无效。
403 禁止访问 对于请求的资源,访问被拒绝。 用户可能没有足够的权限。
404 未找到 (Not Found) 所请求的资源不存在。
405 方法不允许 (Method Not Allowed) 请求中的 HTTP 方法在资源上不允许。
406 不接受 (Not Acceptable) 该服务不支持“Accept”标头中请求的格式。
409 Conflict 当前状态与请求预期的状态的冲突。 例如,指定的父文件夹可能不存在。
410 不存在 (Gone) 所请求的资源在服务器不再可用。
411 需要长度 (Length Required) 请求上需要 Content-Length 标头。
412 前提条件不满足 (Precondition Failed) 请求中提供的前提条件(例如“If-Match”标头)与资源的当前状态不匹配。
413 请求实体太大 (Request Entity Too Large) 请求的大小超出最大限制。
415 媒体类型不受支持 (Unsupported Media Type) 请求的内容类型的格式不受服务支持。
416 请求的范围不满足 (Requested Range Not Satisfiable) 指定的字节范围无效或不可用。
422 实体无法处理 (Unprocessable Entity) 无法处理请求,因为语义上不正确。
429 请求过多 (Too Many Requests) 客户端应用程序已被限制,经过一段时间之后再尝试重复的请求。
500 内部服务器错误 (Internal Server Error) 处理请求时出现内部服务器错误。
501 未实现 (Not Implemented) 所请求的功能未实现。
503 服务不可用 该服务暂时不可用。 可以过段时间之后再重复该请求。 可能会有 Retry-After 标头。
507 存储不足 (Insufficient Storage) 已达到最大存储配额。
509 超出带宽限制 您的应用因超出最大带宽上限而被限制。 应用可以在等待一段时间之后再重试该请求。

错误响应是单个 JSON 对象,包含名为“错误”的单个属性。 此对象包括错误的所有详细信息。 除了返回的 HTTP 状态代码外,您还可以使用此处返回的信息,或者使用此信息替代 HTTP 状态代码。 下面是完整的 JSON 错误正文示例。

{
  "error": {
    "code": "invalidRange",
    "message": "Uploaded fragment overlaps with existing data.",
    "innererror": {
      "code": "fragmentOverlap"
    }
  }
}

code 属性

code 属性有 15 个可取值。 应用应做好处理其中任一错误的准备。

代码 说明
accessDenied 调用方没有执行该操作的权限。
activityLimitReached 应用或用户已被限制。
generalException 发生未指定错误。
invalidRange 指定的字节范围无效或不可用。
invalidRequest 该请求格式有误或不正确。
itemNotFound 找不到资源。
malwareDetected 所请求的资源中检测到恶意软件。
nameAlreadyExists 指定的项目名称已存在。
notAllowed 系统不允许执行此操作。
notSupported 系统不支持该请求。
resourceModified 正在更新的资源自上次调用方读取时已进行了更改,通常是 eTag 不匹配。
resyncRequired 增量令牌将不再有效,并且应用必须重置同步状态。
serviceNotAvailable 服务不可用。 过段时间后再次尝试请求。 可能会有 Retry-After 标头。
quotaLimitReached 用户已达到其配额限制。
unauthenticated 调用方未进行身份验证。

innererror 对象可能以递归方式包含更多 innererror 对象,其中具有其他更多具体的错误代码。 处理错误时,应用应遍历所有可用错误代码并使用它们认为最详细的错误代码。 在本页底部列出了一些更详细的代码。

若要验证某个错误对象是否是你想要的错误,你必须遍历 innererror 对象,查找你想要的错误代码。 例如:

public bool IsError(string expectedErrorCode)
{
    OneDriveInnerError errorCode = this.Error;
    while (null != errorCode)
    {
        if (errorCode.Code == expectedErrorCode)
            return true;
        errorCode = errorCode.InnerError;
    }
    return false;
}

有关正确处理错误的完整示例,请参阅 OneDrive 错误代码处理

根处的 message 属性包含供开发人员阅读的错误消息。 错误消息未本地化,并且不应直接向用户显示。 处理错误时,你的代码不能切断 message 值,因为它们随时会更改,并且它们通常包含 特定于失败请求的动态信息。 只应针对 code 属性中返回的错误代码进行编码。

若要详细了解错误响应中返回的资源,请参阅 Error 资源类型主题。

详细的错误代码

下面是你的应用可能会在嵌套的 innererror 对象中遇到的一些其他错误。 应用不需要处理这些错误,但如果选择处理,也可以这样做。 服务可能会随时添加新的错误代码或停止返回旧的错误代码,因此所有应用务必要能够处理上述 15 个基本错误代码。

代码 说明
accessRestricted 访问仅限于该项目的所有者。
cannotSnapshotTree 未能获取一致的增量快照。 请稍后重试。
childItemCountExceeded 已达到最大子项目数限制。
entityTagDoesNotMatch ETag 与当前项目的值不匹配。
fragmentLengthMismatch 为此片段声明的总大小与上载会话的大小不同。
fragmentOutOfOrder 已上载的片段无序。
fragmentOverlap 上载的片段与现有数据重叠。
invalidAcceptType 接受类型无效。
invalidParameterFormat 参数格式无效。
invalidPath 名称包含无效字符。
invalidQueryOption 查询选项无效。
invalidStartIndex 开始索引无效。
lockMismatch 锁定令牌与现有锁定不匹配。
lockNotFoundOrAlreadyExpired 该项目上目前没有未过期的锁定。
lockOwnerMismatch 锁定所有者 ID 与提供的 ID 不匹配。
malformedEntityTag ETag 标头格式不正确。 ETags 必须是带引号的字符串。
maxDocumentCountExceeded 已达到最大文档数量限制。
maxFileSizeExceeded 已超出最大文件大小。
maxFolderCountExceeded 已达到最大文件夹数量限制。
maxFragmentLengthExceeded 已超出最大文件大小。
maxItemCountExceeded 已达到最大项目数量限制。
maxQueryLengthExceeded 已超出最大查询长度。
maxStreamSizeExceeded 已达到最大流大小。
parameterIsTooLong 参数超出最大长度。
parameterIsTooSmall 参数小于最小值。
pathIsTooLong 路径超出最大长度。
pathTooDeep 已达到文件夹层次结构深度限制。
propertyNotUpdateable 属性无法更新。
resyncApplyDifferences 需要重新同步。 如果您确定上次同步时服务与您的本地更改保持同步,则请将任意本地项目替换为服务器的版本(包括删除)。 上载服务器并不清楚的任意本地更改。
resyncRequired 需要重新同步。
resyncUploadDifferences 需要重新同步。 上载服务未返回的任意本地项目,并上载与服务器版本不同的任意文件(如果不知道哪个是最新的,请保留两份)。
serviceNotAvailable 服务器无法处理当前的请求。
serviceReadOnly 资源暂时是只读的。
throttledRequest 请求过多。
tooManyResultsRequested 请求的结果过多。
tooManyTermsInQuery 查询中的术语过多。
totalAffectedItemCountExceeded 因为受影响的项目数量超出阈值,所以不允许该操作。
truncationNotAllowed 不允许数据截断。
uploadSessionFailed 上载会话失败。
uploadSessionIncomplete 上载会话未完成。
uploadSessionNotFound 上载会话未找到。
virusSuspicious 此文档可疑,可能存在病毒。
zeroOrFewerResultsRequested 请求的结果为零或更少。