2015-11-07 97 views
0

试图调用Dropbox API v2。Dropbox API如何在RestRequest中设置内容类型

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" 

试过注释掉的代码行,但还是同样的反应。任何线索?

+0

从代码猜测,但是这个Visual Basic,你使用[RestSharp](http://restsharp.org/)? – smarx

回答

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) 
+0

非常接近,我不得不做一个json对象,然后调用request.AddParameter(“application/json”,json,ParameterType.RequestBody) –

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而不带引号。很多尝试和错误,但终于工作。