【问题标题】:C# System.Net.HttpClient intermittent 401 Unauthorized with Github APIC# System.Net.HttpClient 间歇性 401 Unauthorized with Github API
【发布时间】:2017-03-02 21:21:33
【问题描述】:

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

我使用下面生成的 HTTP 客户端发出的每 10 个请求中约有 5 个响应“401 Unauthorized”。我在邮递员中放置了相同的 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;
    }

【问题讨论】:

    标签: c# .net rest


    【解决方案1】:

    结果我的时钟快了 15 秒,这使得我生成的令牌无效,因为从 Githubs 的角度来看它们是“来自未来的”。因此,如果我在断点处暂停,并且碰巧等待了 15 秒或更长时间,它就会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多