【发布时间】:2015-12-12 14:06:31
【问题描述】:
我正在开发一个 UWP 应用,以便快速了解我的体式任务并进行时间管理。但是,在一切正常的情况下,我无法更新任何任务。
设置如下:在导航到 OAuth 重定向 url 的情况下,我通过拦截导航事件通过 WebView-Element(托管 Web 浏览器)获取 oauth 令牌。
我按如下方式对其余服务执行我的 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 调用返回 401:在我的 get 调用正常工作时未授权?请注意,我可以在 asana 的 web gui 中编辑指定的任务。
非常感谢您的帮助。
【问题讨论】:
-
一般来说,没有理由你应该能够 GET 一个资源,但在 PUT 时得到一个 Unauthorized,除非你试图更新你不能更新的东西(比如设置一个你可以看到但不能修改的团队),即使那样你也应该得到一个 403 Forbidden。您可以尝试使用
curl -v复制案例吗?那时还会发生吗?我对 UWP 不是很熟悉,所以将其放到“查看线路上的位”可能会有所帮助。 -
我试过了,我得到了完全相同的结果......你在 curl 的详细输出中寻找什么具体的东西?我的请求: curl --request PUT -H "Authorization: bearer
" app.asana.com/api/1.0/tasks/<task id> -d "notes= " -v -
嗯,其实“Authorization: Bearer”会返回Not Authorized,因为“bearer”需要大写。如果您将其修复为“Authorization: Bearer [TOKEN]”,curl 调用是否仍然失败?
-
旧线程,但我的问题是“承载”后缺少空格。当令牌过去以“0”开头时它起作用,但它不适用于以“1”开头的令牌。 ¯_(ツ)_/¯ 无论如何,我希望对某人有所帮助