我使用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;
}
答案 0 :(得分:1)
事实证明,我的时钟快了15秒,这使得我生成的令牌无效,因为它们来自未来"从Githubs的角度来看。所以,如果我暂停一个断点,并且恰好等待15秒或更长时间,那就可以了。