2011-08-25 4 views
3

J'obtiens une image de Google Charts en créant un WebRequest via POST.Afficher l'image de WebRequest

Le problème que j'ai est affiche l'image retournée par Google.

Je peux voir dans Fiddler que la demande de l'image est faite, et l'image renvoyée dans la réponse quand je fais:

var response = request.GetResponse(); 

Cependant d'ici, je ne semble pas être en mesure de produire le image de mon contrôleur.

Voici ce que je fais en ce moment:

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); 
       } 
      } 

Le message d'erreur affiché dans ma fenêtre du navigateur est:

L'image « [chemin vers l'image] » ne peut pas être affiché, car il contient des erreurs .

Répondre

3

Essayez d'utiliser un WebClient, il simplifiera votre code:

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"); 
    } 
} 

ou si vous avez besoin d'utiliser une requête POST et envoyer des valeurs utilisent la méthode 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"); 
    } 
} 

et puis dans la vue:

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

ou si l'URL est statique et peut être atteint avec une requête GET, vous pouvez l'inclure directement dans votre vue (vous n'avez pas besoin d'une action de contrôleur dans ce cas):

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

Merci Darin. J'aurais dû mentionner que je le fais comme une demande POST en raison d'une grande quantité de données transmises à Google. Est-ce que DownloadData fonctionne sur Http Post? –

+0

@Jamie Dixon, s'il vous plaît voir ma mise à jour et l'utilisation de la méthode 'UploadValues'. –

+0

Fantastique. Merci Darin. Cela simplifie mon tas de code. –