Dropbox API如何在RestRequest中设置Content-Type

时间:2015-11-07 20:55:12

标签: dropbox-api

尝试调用Dropbox API v2。

Dim client = New RestClient("https://api.dropboxapi.com/2/")
Dim request = New RestRequest("files/search", Method.POST)
request.AddHeader("Authorization", "Bearer " & MYTOKEN)
request.AddHeader("Content-Type", "application/json")
'request.RequestFormat = DataFormat.Json
'request.JsonSerializer.ContentType = "application/json; charset=utf-8;"
 'request.AddParameter("Content-Type", "application/json")
 request.AddParameter("path", "")
 request.AddParameter("query", "my file")
 request.AddParameter("start", "0")
 request.AddParameter("max_results", "1")
 request.AddParameter("mode", "filename")
 Dim res = client.Execute(request)

始终返回

Error in call to API function "files/search": Bad HTTP "Content-Type" header: "application/x-www-form-urlencoded".  Expecting one of "application/json", "application/json; charset=utf-8", "text/plain; charset=dropbox-cors-hack"

尝试了注释的代码行但仍然是相同的响应。任何线索?

2 个答案:

答案 0 :(得分:1)

如果我的猜测是正确的,这是使用RestSharp的Visual Basic代码,那么我认为你需要这样的东西(道歉,如果它不太正确;我不懂VB语法):

Dim client = New RestClient("https://api.dropboxapi.com/2/")
Dim request = New RestRequest("files/search", Method.POST)
request.AddHeader("Authorization", "Bearer " & MYTOKEN)
request.RequestFormat = DataFormat.Json
request.AddBody(New With {
    .path = "",
    .query = "my file",
    .start = 0,
    .max_results = 1,
    .mode = "filename"
})
Dim res = client.Execute(request)

答案 1 :(得分:0)

像这样解决了。可能有更好的方法可以做到这一点,但现在可以使用。

Dim client = New RestClient("https://api.dropboxapi.com/2/") 
Dim request = New RestRequest("files/search", Method.POST)
request.AddHeader("Authorization", "Bearer " & MYTOKEN)
 request.AddHeader("Content-Type", "application/json")  '---> this line still doesn't seem to do anything

Dim json As New JObject(New JProperty("path", ""), New JProperty("query", "my file"), New JProperty("max_results", 1), New JProperty("mode", "filename")) 
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim res = client.Execute(request)

Dropbox API似乎非常敏感,例如,AddParameter中的对象不能是json字符串,它必须是json对象。并且“1”表示在max_results中不起作用,它必须是1而不带引号。很多反复试验但终于奏效了。