1
我試圖使用OneDrive API上傳文件。身份驗證按預期工作。身份驗證使用files.readwrite.all
和offline_access
範圍。其他諸如獲取用戶文件的調用也按預期工作。當要上傳文件時,我收到401未經授權的錯誤。OneDrive文件上傳意外401
首先我創建的上載會話和使用下面的代碼獲取上傳網址:
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri("https://graph.microsoft.com");
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken.ToString());
HttpResponseMessage response;
response = await client.PostAsync("/v1.0/drive/root:" + path + "/" + file.FileName + ":/createUploadSession", null);
string uploadUrl = (string)JObject.Parse(await response.Content.ReadAsStringAsync())["uploadUrl"];
}
可正常工作。響應狀態碼是200,我得到上傳URL。接下來,我想使用上傳網址上傳文件。內容包含我想要上傳的第一個塊的字節。內容長度和內容範圍也設置正確。我使用放置請求將使用相同客戶端的內容發送到上傳URL。
ByteArrayContent content = new ByteArrayContent(chunk);
content.Headers.Add("Content-Length", (contentRangeEnd - contentRangeBegin).ToString());
content.Headers.Add("Content-Range", "bytes " + contentRangeBegin + "-" + (contentRangeEnd - 1) + "/" + allBytes.Length);
response = await client.PutAsync(uploadUrl, content);
放置請求導致401錯誤。訪問令牌似乎是有效的,因爲其他調用如獲取文件按預期工作。
如何解決401錯誤?
這是正確的。從[文檔](https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/item_createuploadsession#upload-bytes-to-the-upload-session):包括髮出PUT調用時的授權標頭可能會導致HTTP 401 Unauthoized響應。只有在第一步中發佈POST時才應該發送Authoization標頭和不記名標記。發佈PUT時不應該包含它。 –