Стандартные отклики и коды ошибок

Для возвращения ошибок в API OneDrive используются стандартные коды состояния 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, содержащий одно свойство с именем error. Этот объект включает все сведения об ошибке. Вы можете использовать возвращенные сведения вместо полученного кода состояния 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 Идентификатор владельца блокировки не соответствует указанному идентификатору.
malformedEntityTag Неправильный формат заголовка тега ETag. Теги ETag должны представлять собой строки, заключенные в кавычки.
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 Запрошено ноль или меньше результатов.