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。