HttpClient返回“服务器违反协议”错误-浏览器返回正确数据

6

我正在尝试使用Membership Reboot设置Github。

如果我尝试从浏览器调用Github API,如下所示:

https://api.github.com/user?access_token=XXXXXXX

我可以看到所有有效的JSON数据,但是如果我尝试从.NET中调用,则无法正常工作。

  public ActionResult Index()
    {
        var url = "https://api.github.com/user?access_token=XXXXXXXX";
        ////add additional params
        //if (additionalParams != null)
        //{
        //    foreach (string key in additionalParams)
        //    {
        //        url += string.Format("&{0}={1}", key, additionalParams[key]);
        //    }
        //}

        HttpClient client = new HttpClient();
        var result =  client.GetAsync(url).Result;
        if (result.IsSuccessStatusCode)
        {
            var json =  result.Content.ReadAsStringAsync().Result;
            var profile = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
            //return GetClaimsFromProfile(profile);
        }
        return View();
    }

我遇到了一个错误:

服务器违反了协议。Section=ResponseStatusLine

HttpClient不喜欢我正在尝试的什么?我需要提供浏览器为我执行的额外细节吗?

任何帮助都将不胜感激!


你看过最终的URL了吗?可能有换行符或非法字符吗? - recursive
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Diver Dan
实际值是什么?您没有给出additionalParams的值,我怀疑问题是由它包含的值引起的。 - recursive
2个回答

2
添加
<system.net>
    <settings>
      <httpWebRequest useUnsafeHeaderParsing="true" />
    </settings>
  </system.net>

在我的web.config中加入这个似乎解决了问题...我并不真正明白为什么需要添加这个但是它有效。


0

不确定这里是否相关,但我在https://api.github.com/user端点上遇到了同样的问题。我的解决方案比我想象中简单,但仍然很烦人,因为我花了几个小时才找到答案。

User-Agent应该传递给API端点,也许在这里指定一个User-Agent也可以起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接