C#System.Net.HttpClient间歇性401未经授权使用Github API

时间:2017-03-02 21:21:33

标签: c# .net rest

我使用System.Net.Http HttpClient来调用Github的rest API。

我使用下面生成的HTTP客户端发出的每10个请求中,大约有5个响应" 401 Unauthorized"。我在postman中放了相同的URL和标题,从来没有得到任何" 401 Unauthorized"响应。显然,我的问题出在客户端。

合理的搜索返回了很多不同的建议。最常见的是使用HttpHandler或webrequest,但它仍然不清楚为什么有些请求失败。我最好的猜测是,Github偶尔会重定向,客户也无法很好地处理它。我看到了一些关于缓存凭据的引用,但这些示例都显示了" NetworkCredential"对象,但对于OAuth,我们只是将持有人令牌放在标题中,如下所示,所以我不确定这是否适用于我的情况。

有人能解释问题的原因吗?

        public static HttpClient GetClient(string bearerToken)
    {
        HttpClient client = new HttpClient();
        client.BaseAddress = _githubApiUri;
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(_mediaTypeWithQualityHeaderValue));
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);
        client.DefaultRequestHeaders.Add("User-Agent", "System.Net.Http Agent");
        return client;
    }

1 个答案:

答案 0 :(得分:1)

事实证明,我的时钟快了15秒,这使得我生成的令牌无效,因为它们来自未来"从Githubs的角度来看。所以,如果我暂停一个断点,并且恰好等待15秒或更长时间,那就可以了。