Asana:401:未授权放置请求但未获得获取请求
Asana: 401: Not authorized on put requests but not on get requests
我正在开发一个 UWP 应用程序,用于快速概览和一些时间管理我在 asana 上的任务。但是,在一切正常的情况下我无法更新任何任务。
设置如下:我通过 WebView-Element(托管 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);
}
奇怪的是,现在 Get 调用有效,而 PUT 调用失败。一个例子是
CallApiPut("/tasks/<task id>", "notes","updated notes value");
知道为什么我的 put 调用 return 401:未授权而我的 get 调用工作正常吗?请注意,我可以在 asana 的 web gui 中编辑指定的任务。
非常感谢您的帮助。
我用 Authorization: bearer
而不是 Authorization: Bearer
。注意大写字母,这就是诀窍!奇怪的是,小写 bearer
在 oauth 期间是 return (响应中的 token_type
)并且适用于 GETting 但不适用于 PUTing.
无论如何,谢谢 Agnoster。
我正在开发一个 UWP 应用程序,用于快速概览和一些时间管理我在 asana 上的任务。但是,在一切正常的情况下我无法更新任何任务。
设置如下:我通过 WebView-Element(托管 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);
}
奇怪的是,现在 Get 调用有效,而 PUT 调用失败。一个例子是
CallApiPut("/tasks/<task id>", "notes","updated notes value");
知道为什么我的 put 调用 return 401:未授权而我的 get 调用工作正常吗?请注意,我可以在 asana 的 web gui 中编辑指定的任务。
非常感谢您的帮助。
我用 Authorization: bearer
而不是 Authorization: Bearer
。注意大写字母,这就是诀窍!奇怪的是,小写 bearer
在 oauth 期间是 return (响应中的 token_type
)并且适用于 GETting 但不适用于 PUTing.
无论如何,谢谢 Agnoster。