2015-12-23 68 views
0

我有一個asp.net mvc控制器方法「索引」,如下所示。我想使用HttpClient GetAsync方法從wwww.google.com獲得響應,然後將此響應作爲響應發送到瀏覽器,因此瀏覽器顯示www.google.com。但我不知道如何用來自client.GetAsync的響應來替換響應。請幫忙!我不想使用重定向。發送Asp.net HttpClient獲取結果到瀏覽器

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


     return ???; 
    } 

回答

1

請儘量看到這個帖子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

+0

我試過了,但確實有效。 –

+0

哇,我現在在我的本地機器上運行谷歌,看我編輯我的代碼 –

+0

嗨Abdelrhman,我想瀏覽器具有谷歌會話相同的谷歌會話。在你的例子中,瀏覽器是否具有相同的會話,或只是顯示頁面?所以,如果google.com向我發送了一個cookie,我希望這個cookie也被髮送到瀏覽器。 –

2

您可以使用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的內容。

+0

我發現這個解決方案也很好。 –

相關問題