我几乎已经完成了一个基本的OneDrive界面,并且能够处理创建和编写文件夹,文件等等。最后一个工作的元素是更新文件的日期/时间戳以匹配本地(原始)文件的日期/时间戳。
当我通过浏览器界面删除文件时,文件的日期/时间戳在视图中正确显示。当我稍后在应用程序中读取文件的属性时,这反映在“client_updated_time”中。足够清楚。
但是,我无法找到以任何方式从我的应用程序中以编程方式更新此字段。我使用以下代码,无济于事。我有一个有效的_accessToken值,一个新文件的有效fileId,并且调用结果总是表示成功。
“name”和“updated_time”元素就在那里,看是否有任何事情发生,如果我稍微破坏了fileName变量,文件确实会重命名。我没想到“updated_time”会更新,但在我看来“client_updated_time”元素应该可以正常工作。
使用fiddler,似乎基于浏览器的界面(java?)打开会话,发送文件,然后在close-session调用中使用标记为“X-Last-Modified-ISO8601”的标题条目设置文件的日期时间戳。但是,使用REST接口,我找不到任何这样的例子。设置文件属性的文档仅提到重命名(在此代码中有效)。
有关如何使用REST调用完成“client_updated_time”设置的任何反馈都将非常感谢!
以下是相关代码:
Private _liveURL As String = "https://apis.live.net/v5.0/"
Private Sub AddAuthorizationHeader(hc As HttpClient, authorization As String)
If Len(authorization) > 0 Then
hc.DefaultRequestHeaders.Authorization = New Headers.AuthenticationHeaderValue("Bearer", authorization)
End If
End Sub
Public Function WebPUT(uri As String, contentType As String, authorization As String, data As String) As String
Dim response As String = String.Empty
Try
Dim hc As New HttpClient()
Dim content As New Http.StringContent(data, System.Text.Encoding.UTF8, contentType)
AddAuthorizationHeader(hc, authorization)
Using r = hc.PutAsync(uri, content).Result
response = r.Content.ReadAsStringAsync.Result
End Using
Catch ex As Exception
' fake it
response = "{""error"": {""code"": ""invalid_request"", ""message"": """ + ex.Message + """}}"
End Try
Return response
End Function
Private Function UpdateFileDateTime(fileId As String, fileName As String, fileDt As String) As Boolean
Dim response As Boolean = False
Dim wr As String = WebHelper.WebPUT(_liveURL + fileId, "application/json", _accessToken, "{ ""name"": """ + fileName + """, ""updated_time"": """ + fileDt + """, ""client_updated_time"": """ + fileDt + """ }")
'... parse wr for response
Return response
End Function