c# - Stackoverflow API 响应格式

标签 c# asp.net stackexchange-api

当 C# 创建 HTTP GET 请求时,Stackoverflow API 返回意外响应。

如果我粘贴 http://api.stackoverflow.com/1.1/users/882993进入浏览器地址栏,我得到正确的 JSON 响应:

{
  "total": 1,
  "page": 1,
  "pagesize": 30,
  "users": [
    {
      "user_id": 882993,
      "user_type": "registered",
      "creation_date": 1312739131,
      "display_name": "Jack",
      "reputation": 1926,
      "email_hash": "69243d90e50d9e0b3e025517fd23d1da",
      "age": 23,
      "last_access_date": 1358087009,
      "website_url": "http://jtbrown.me.uk",
      "location": "Birmingham, United Kingdom",
      "about_me": "<p>Student.</p>\n",
      "question_count": 68,
      "answer_count": 79,
      "view_count": 115,
      "up_vote_count": 98,
      "down_vote_count": 3,
      "accept_rate": 94,
      "association_id": "d64187a3-bf66-4a4d-8e87-6ef18f0397e3",
      "user_questions_url": "/users/882993/questions",
      "user_answers_url": "/users/882993/answers",
      "user_favorites_url": "/users/882993/favorites",
      "user_tags_url": "/users/882993/tags",
      "user_badges_url": "/users/882993/badges",
      "user_timeline_url": "/users/882993/timeline",
      "user_mentioned_url": "/users/882993/mentioned",
      "user_comments_url": "/users/882993/comments",
      "user_reputation_url": "/users/882993/reputation",
      "badge_counts": {
        "gold": 0,
        "silver": 7,
        "bronze": 34
      }
    }
  ]
}

如果我尝试在代码中执行相同的操作:

    HttpWebRequest Request = WebRequest.Create("http://api.stackoverflow.com/1.1/users/882993") as HttpWebRequest;  

    using (HttpWebResponse Response = Request.GetResponse() as HttpWebResponse)  
    {  
        // Get the response stream  
        StreamReader Reader = new StreamReader(Response.GetResponseStream());

        // Console application output  
        StackWidget.Text = Reader.ReadToEnd();
    } 

我收到回复:

�\b\0\0\0\0\0\0u�Ms�0���`8��Ӏ2�rl����#���J4��^\t#�p�g���j�����|�n�G/ڎ�7p����$�5\r���f�y�v�����\"F(���֛0���J�?{��������$���e�!T�-~+��@_p���j\fb�(�f�my��dt�ӄ�!AV\t����G'$\"؉i{;��X��5H9�z(�\"GQ<�]��TA9\b�Z��T��U%���;�n�-����*:ʚ��w�c��޹yU|P�m�S��M\r��?��O���@�m������\n'\b�}/�ь�.7E\a�*���uaDN@�k��N�L�zU\n�3�:DJ^S{����$K�\"�ɮ:f�.�)�P�\f�Qq\f�C�/�k*UN=�A\r�,7���.���p�9�3�jVT7��)ܬH\fYzW�4kGX�_|�AK��q�KU�GGw��^�j����D���7�\\��Ƴr,�N�yzno�F\ro�̄[�&i{afڵ��ٗ,���c\\~=l>6�\0U�F\0\0

最佳答案

您收到的 HTTP 响应是 GZIP 压缩的,因此您必须解压缩响应流。这可以通过设置 HttpWebRequest.AutomaticDecompression 自动完成。属性(property)。

var request = (HttpWebRequest)WebRequest.Create("http://api.stackoverflow.com/1.1/users/882993");
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 
using (var response = request.GetResponse())
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
    var json = reader.ReadToEnd();
}

关于c# - Stackoverflow API 响应格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14304592/

相关文章:

c# - 如何在每个新页面上自动添加命名空间,控件添加到 VS2008 中的网站?

c# - nHibernate 中的 ICriteria 和 ICriterion 之间有什么区别/优势?

asp.net - 通过 WebAPI 流式传输 SqlFileStream

python - 堆栈交换 API : fetch answers to a specific stack post

stackexchange-api - 用于链接访问的 SE Data Explorer 表

关闭表单时出现 C# ArgumentOutOfRangeException

javascript - Onclick 事件中未获取复选框的 ClientID

javascript - 复选框控件不接受页面加载值

stackexchange-api - 如何通过stackexchange api调用检索stackoverflow标签使用计数?

c# - 如何从父实例实例化子实例