HttpClient返回服务器提交了协议违规 - 浏览器返回正确的数据

时间:2014-10-15 01:04:38

标签: c# webclient

我正在尝试使用会员重启来设置github。

如果我尝试从像

这样的浏览器调用github api
  

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

如果我尝试使用.net

,我可以看到所有有效的json数据
  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();
    }

我收到错误

  

服务器提交了协议违规。节= ResponseStatusLine

HttpClient不喜欢我正在尝试的内容吗?我是否需要提供浏览器为我做的额外细节?

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

添加

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

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

答案 1 :(得分:0)

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

User-Agent应该传递给API端点,也可以通过指定User-Agent来实现。