Asana:401:未提出请求但未获得请求的授权

时间:2015-12-12 14:06:32

标签: c# uwp asana asana-api

我正在开发一个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中编辑指定的任务。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我使用Authorization: bearer代替Authorization: Bearer。注意大写,这就是诀窍!但奇怪的是,小写bearer在oauth(响应中为token_type)期间返回,并且与GETting一起使用但不是PUTing。

无论如何,感谢Agnoster。