我正在开发一个UWP应用程序,用于快速浏览和执行我在asana上的任务的时间管理。但是,在让一切正常的情况下,我无法更新任何任务。
设置如下:我通过WebView元素(托管的Web浏览器)获取oauth令牌,方法是在导航到OAuth重定向URL时拦截导航事件。
我按照以下方式对其他服务执行api调用:
private static async Task<JObject> CallApiGet(string api)
{
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", TokenType + " " + AccessToken);
HttpResponseMessage result = await client.GetAsync(baseAPIUrl + api);
result.EnsureSuccessStatusCode();
string asText = await result.Content.ReadAsStringAsync();
return JObject.Parse(asText);
}
private static async Task<JObject> CallApiPut(string api, params string[] properties)
{
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", TokenType + " " + AccessToken);
var keys = properties.Where((item, index) => index % 2 == 0);
var values = properties.Where((item, index) => index % 2 != 0);
string urlEncoded = string.Join("&", keys.Zip(values, (key, value) => Uri.EscapeDataString(key) + "=" + Uri.EscapeDataString(value)));
HttpContent content = new StringContent(urlEncoded, null, "application/x-www-form-urlencoded");
HttpResponseMessage result = await client.PutAsync(baseAPIUrl + api, content);
result.EnsureSuccessStatusCode();
string asText = await result.Content.ReadAsStringAsync();
return JObject.Parse(asText);
}
现在奇怪的是,当PUT调用失败时,Get调用工作。一个例子是
CallApiPut("/tasks/<task id>", "notes","updated notes value");
我知道为什么我的看跌期权回复401:未经授权而我的看涨期权工作正常?请注意,我可以在asana的web gui中编辑指定的任务。
非常感谢你的帮助。
答案 0 :(得分:1)
我使用Authorization: bearer
代替Authorization: Bearer
。注意大写,这就是诀窍!但奇怪的是,小写bearer
在oauth(响应中为token_type
)期间返回,并且与GETting一起使用但不是PUTing。
无论如何,感谢Agnoster。