0

我正在尝试使用 VB.Net 和 Microsoft Graph API 将一个大文件 (> 4 MB) 上传到 Sharepoint 驱动器。出于测试目的,我的目标是驱动器的根。稍后我将指定一个子文件夹。这是我使用的代码:

Public Shared Async Function UploadToFolder(ByVal driveId As String) As Task(Of DriveItem)
        Dim resultDriveItem As DriveItem = Nothing
        Try
            Using fileStream As New IO.FileStream(fileLocation, IO.FileMode.Open, IO.FileAccess.Read)
                Dim uploadSession As UploadSession = Await GraphClient.Drives(driveId).Root.ItemWithPath("test.pdf").CreateUploadSession().Request().PostAsync()
                Dim maxSlice As Integer = 320 * 1024
                Dim largeFileUpload As New LargeFileUploadTask(Of DriveItem)(uploadSession, fileStream, maxSlice)
                Dim uploadResult As UploadResult(Of DriveItem) = Await largeFileUpload.UploadAsync() 'error occurs here
                resultDriveItem = uploadResult.ItemResponse
            End Using
        Catch ex As Exception
            Stop
        End Try
        Return resultDriveItem
    End Function

不幸的是,Await largeFileUpload.UploadAsync() 发生错误。当我查看错误消息时,它没有多大意义:

Code: generalException
Message: An error occurred sending the request.

最重要的是,堆栈跟踪也对我没有任何帮助。

   bij Microsoft.Graph.SimpleHttpProvider.<SendRequestAsync>d__13.MoveNext()
--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---
   bij System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   bij System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   bij System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   bij Microsoft.Graph.SimpleHttpProvider.<SendAsync>d__10.MoveNext()
--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---
   bij System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   bij System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   bij System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   bij Microsoft.Graph.UploadSliceRequest`1.<SendRequestAsync>d__18.MoveNext()
--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---
   bij System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   bij System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   bij System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   bij Microsoft.Graph.UploadSliceRequest`1.<PutAsync>d__17.MoveNext()
--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---
   bij System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   bij System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   bij System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   bij Microsoft.Graph.LargeFileUploadTask`1.<UploadSliceAsync>d__14.MoveNext()
--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---
   bij System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   bij System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   bij System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   bij Microsoft.Graph.LargeFileUploadTask`1.<UploadAsync>d__16.MoveNext()
--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---
   bij System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   bij System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   bij System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   bij Office365.Office365.VB$StateMachine_12_UploadToFolder.MoveNext() in C:\Note-books\Projects 2013\SharedTools\Tools\Office365\Office365.vb:regel 294

问题是我可以上传一个较小的文件(使用 PutAsync)或做其他事情(创建文件夹,列出文件夹内容,...)。因此,我确定 GraphClient 的身份验证设置正常。

我究竟做错了什么?有人可以帮忙吗?

斯特凡

4

1 回答 1

0

显然它与 TLS 设置有关。插入

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls Or System.Net.SecurityProtocolType.Tls11 Or System.Net.SecurityProtocolType.Tls12

函数顶部的解决了该问题。

于 2022-02-18T13:55:46.470 回答