【问题标题】:Send Asp.net HttpClient Get result to browser发送 Asp.net HttpClient 获取结果到浏览器
【发布时间】:2016-03-30 08:06:22
【问题描述】:

我有一个 asp.net mvc 控制器方法“索引”,如下所示。我想使用 HttpClient GetAsync 方法从 www.google.com 获取响应,然后将此响应作为响应发送到浏览器,因此浏览器显示 www.google.com。但我不知道如何用从 client.GetAsync 获得的响应替换响应。请帮忙!不过我不想使用重定向。

    public async Task<ActionResult> Index()
    {
        HttpClient client = new HttpClient();
        var httpMessage = await client.GetAsync("http://www.google.com");


        return ???;
    }

【问题讨论】:

    标签: c# asp.net asp.net-mvc


    【解决方案1】:

    您可以使用ReadAsStringAsync() 方法将来自http 调用的响应作为字符串读取,并将该字符串作为您的操作方法的响应返回。

    public async Task<ActionResult> Index()
    {
        HttpClient client = new HttpClient();
        var httpMessage = await client.GetAsync("http://www.google.com");
    
        var r = await httpMessage.Content.ReadAsStringAsync();
    
        return Content(r);
    }
    

    当您访问Index 操作时,上述代码将返回google.com 的内容。

    【讨论】:

      【解决方案2】:

      请尝试查看此帖子HttpClient Request like browser

      response.EnsureSuccessStatusCode();
          using (var responseStream = await response.Content.ReadAsStreamAsync())
          using (var decompressedStream = new GZipStream(responseStream, CompressionMode.Decompress))
          using (var streamReader = new StreamReader(decompressedStream))
          {
              return streamReader.ReadToEnd();
          }
      

      我在我的机器上制作样品

      这里有完整的动作

          public async Task<string> Index()
          {
              HttpClient client = new HttpClient();
      
      
              client.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "text/html,application/xhtml+xml,application/xml");
              client.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate");
              client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");
              client.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Charset", "ISO-8859-1");
      
      
              var httpMessage = await client.GetAsync("http://www.google.com");
      
              httpMessage.EnsureSuccessStatusCode();
              using (var responseStream = await httpMessage.Content.ReadAsStreamAsync())
              using (var decompressedStream = new GZipStream(responseStream, CompressionMode.Decompress))
              using (var streamReader = new StreamReader(decompressedStream))
              {
                  return streamReader.ReadToEnd();
              }
              // return View();
          }
      

      example for get cookie from server

      【讨论】:

      • 哇,我现在在我的本地机器上运行了谷歌,看我编辑我的代码
      • 您好 Abdelrhman,我希望浏览器具有与服务器从 google 获得的相同的 google 会话。在您的示例中,浏览器是否具有相同的会话,或者它只是显示页面?因此,如果 google.com 向我发送了一个 cookie,我希望该 cookie 也被发送到浏览器。
      • 我找到了这个cookie显示的例子,我也会更新帖子
      猜你喜欢
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      相关资源
      最近更新 更多