2011-08-25 50 views
3

我被通過POST製作WebRequest獲得來自谷歌圖表的圖像。顯示圖像從WebRequest的

我遇到的問題是顯示由谷歌返回的圖像。

我可以小提琴手看到,對於圖像的請求,並在響應返回的圖像時,我做的:

var response = request.GetResponse(); 
從這裏

但是我似乎不能夠輸出圖片來自我的控制器。

下面是我在做什麼現在:

using (var dataStream = response.GetResponseStream()) 
      { 
       if (dataStream == null) return; 

       using (var reader = new StreamReader(dataStream)) 
       { 
        byte[] dataBytes = Encoding.UTF8.GetBytes(reader.ReadToEnd()); 
        Response.ContentType = "image/png"; 
        Response.BinaryWrite(dataBytes); 
       } 
      } 

在瀏覽器窗口中顯示的錯誤消息是:

無法顯示圖像「[路徑圖片]」,因爲它包含 錯誤。

回答

3

嘗試使用WebClient,這將簡化代碼:

public ActionResult MyChart() 
{ 
    using (var client = new WebClient()) 
    { 
     var data = client.DownloadData("http://......"); 

     // TODO: the MIME type might need adjustment 
     return File(data, "image/png", "chart.png"); 
    } 
} 

,或者如果你需要使用POST請求,併發送一些值,用UploadValues方法:

public ActionResult MyChart() 
{ 
    using (var client = new WebClient()) 
    { 
     var request = new NameValueCollection 
     { 
      { "foo", "foo value" }, 
      { "bar", "bar value" }, 
     }; 
     var data = client.UploadValues("http://......", request); 

     // TODO: the MIME type might need adjustment 
     return File(data, "image/png", "chart.png"); 
    } 
} 

和然後在視圖中:

<img src="@Url.Action("MyChart", "SomeController")" alt="chart" /> 

或者如果該URL是靜態的,可以使用GET請求,你可以直接將其包含在你的觀點達成(你不需要在這種情況下,控制器動作):

<img src="http://......" alt="chart" /> 
+0

感謝達林。我應該提到,我做這個作爲一個POST請求,因爲傳遞到谷歌的大量數據。 DownloadData是否可以在Http Post上運行? –

+0

@Jamie迪克森,請參閱我的更新和'UploadValues'方法的使用。 –

+0

太棒了。謝謝Darin。這簡化了我的代碼堆。 –