Сервер возвращает Code: InternalServerError при использовании CreateUploadSesssion для загрузки файла - PullRequest
2 голосов
/ 10 марта 2020

Мое приложение может загружать файлы в OneDrive, SharePoint обычно с помощью последовательной загрузки. На данный момент он не работает и выдает InternalServerError при вызове

var uploadSession = await graphClient.Drive.Items["01KGPRHTV6Y2GOVW7725BZO354PWSELRRZ"].ItemWithPath("_hamilton.png").CreateUploadSession().Request().PostAsync();

Я реализую следующее: [https://github.com/microsoftgraph/msgraph-sdk-dotnet/blob/dev/tests/Microsoft.Graph.DotnetCore.Test/Requests/Functional/OneDriveTests.cs] [1]

Исключение:

Status Code: InternalServerError
Microsoft.Graph.ServiceException: Code: InternalServerError
Message: Object reference not set to an instance of an object.
Inner error:
AdditionalData:
request-id: b3ab4fbb-e3c2-4e07-a353-4e2a73b5bf67
date: 3/10/2020 4:25:56 AM
ClientRequestId: b3ab4fbb-e3c2-4e07-a353-4e2a73b5bf67

at Microsoft.Graph.HttpProvider.SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
at Microsoft.Graph.BaseRequest.SendRequestAsync(Object serializableObject, CancellationToken cancellationToken, HttpCompletionOption completionOption)
at Microsoft.Graph.BaseRequest.SendAsync[T](Object serializableObject, CancellationToken cancellationToken, HttpCompletionOption completionOption)

SDK: Microsoft.Graph 1.21.0

1 Ответ

3 голосов
/ 10 марта 2020

У нас также возникла та же проблема, но, похоже, это проблема с Graph API, которая (вероятно) изменилась сегодня (2020-03-10). Кто-то подал ошибку github на https://github.com/microsoftgraph/msgraph-sdk-dotnet/issues/646, за которой вы можете следить, но если вам действительно нужно выполнить эту работу, вы можете ее обойти, переопределив URL-адрес запроса с помощью отражения.

var regex = new Regex(@"/microsoft\.graph\.createUploadSession$");
var reqUrl = uploadSessionReq.RequestUrl;
typeof(DriveItemCreateUploadSessionRequest)
    .GetProperty(nameof(DriveItemCreateUploadSessionRequest.RequestUrl))
    .GetSetMethod(nonPublic: true)
    .Invoke(
        uploadSessionReq,
        new[]
        {
            regex.Replace(reqUrl, "/createUploadSession")
        }
    );
...