2012-04-25 7 views
42

Ok ho modificato il mio codice non ottengo errori ma il messageBox.Show restituisce nulla di vuoto. Forse ho bisogno di aggiungere qualcosa nella stringa del referrer? Non ho capito qual è il referrer e cosa dovrei mettere lì. E ho già una chiave per usarlo nel mio codice. La chiave è una lunga stringa e sto usando il mio codice nel mio codice che non uso con il referrer. Perché dosent traduce la parola "ciao"?HttpClient non esiste in .net 4.0: cosa posso fare?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Globalization; 
using System.IO; 
using System.Net; 
using System.Web; 
using System.Web.Script.Serialization; 




namespace WindowsFormsApplication2 
{ 
    public partial class Form1 : Form 
    { 
     private JavaScriptSerializer _Serializer = new JavaScriptSerializer(); 

     public Form1() 
     { 
      InitializeComponent(); 
      string f = TranslateText("hi", "English", "German", "", ""); 
      MessageBox.Show(f); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
     } 

     public string TranslateText(string inputText, string sourceLanguage, string destinationLanguage, string referrer, string apiKey) 
     { 
       string requestUrl = string.Format(
        "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q={0}&langpair={1}|{2}&key={3}", 
        HttpUtility.UrlEncode(inputText), 
        sourceLanguage.ToLowerInvariant(), 
        destinationLanguage.ToLowerInvariant(), 
        apiKey 
       ); 

       try 
       { 
        HttpWebRequest http = (HttpWebRequest)HttpWebRequest.Create(requestUrl); 
        http.Referer = referrer; 
        HttpWebResponse response = (HttpWebResponse)http.GetResponse(); 
        using (StreamReader sr = new StreamReader(response.GetResponseStream())) 
        { 
         string responseJson = sr.ReadToEnd(); 
         var translation = this._Serializer.Deserialize<Milkshake.Integration.Google.GoogleAjaxResponse<Milkshake.Integration.Google.Translate.TranslationResponse>>(responseJson); 

         if (translation != null && translation.ResponseData != null && translation.ResponseData.ResponseStatus == HttpStatusCode.OK) 
         { 
          return translation.ResponseData.TranslatedText; 
         } 
         else 
         { 
          return String.Empty; 
         } 
        } 
       } 
      catch 
       { 
        return String.Empty; 
      } 
     } 
    } 
} 
+0

Il titolo di questa domanda è molto chiara, ma la domanda in sé non è chiara. Ammetto che mostra uno sforzo di ricerca, ma questo è tutto. Ci dovrebbe essere almeno una frase di contesto invece di permettere al lettore di capire. Ho visto che hai modificato la tua domanda, dovresti fare di nuovo ma assicurarti che il risultato finale sia leggibile per un nuovo arrivato. Le domande hanno valore a lungo termine, ma i partecipanti devono renderlo possibile. –

risposta

39

Ecco una "traduzione" di HttpWebRequest (necessaria piuttosto che WebClient per impostare il referrer). (Usa System.Net e System.IO):

HttpWebRequest http = (HttpWebRequest)HttpWebRequest.Create(requestUrl)) 
    http.Referer = referrer; 
    HttpWebResponse response = (HttpWebResponse)http.GetResponse(); 
    using (StreamReader sr = new StreamReader(response.GetResponseStream())) 
    { 
     string responseJson = sr.ReadToEnd(); 
     // more stuff 
    } 
+1

dbasdeman conosco questo WebClient e httpwebrequest ma non so come usarlo nel mio codice invece del httpclient ... puoi mostrarmi come farlo nel mio codice? Grazie. – user1352869

+0

System.Web.Http è per .net 4.5 ho 4.0 im utilizzando visual csharp pro 2010 e non ho .net 4.5 – user1352869

+0

@ user1352869 gotcha. Si prega di consultare il mio aggiornamento. – McGarnagle

60

Ho usato HttpClient in applicazioni .NET 4.0 in numerose occasioni. Se hai familiarità con NuGet, puoi creare un pacchetto di installazione Microsoft.Net.Http per aggiungerlo al tuo progetto. Vedi il link sottostante per ulteriori dettagli.

http://nuget.org/packages/Microsoft.Net.Http

+2

JFYI: questo non funzionerà con Mono - appena trovato questo :( – avs099

+0

sì ... per mono è possibile utilizzare HttpWebRequest – cecilphillip

+0

Si dice anche "Questo pacchetto non è supportato in Visual Studio 2010 ed è richiesto solo per i progetti di targeting .NET Framework 4.5 ". Sai qual è la differenza tra questo pacchetto e http://www.nuget.org/packages/HttpClient? – ChrisW

12

Facendo riferimento alle risposte di cui sopra, io sono solo aggiungendo questo per aiutare a chiarire le cose. È possibile utilizzare HttpClient da .Net 4.0 e installare il pacchetto da here

Tuttavia, il testo è molto confuso e contraddice se stesso.

Questo pacchetto non è supportato in Visual Studio 2010 ed è richiesto solo per i progetti destinati a .NET Framework 4.5, Windows 8 o Windows Phone 8.1 quando si utilizza una libreria che utilizza questo pacchetto.

Ma al di sotto si afferma che queste sono le piattaforme supportate.

piattaforme supportate:

  • .NET Framework 4

  • di Windows 8

  • Windows Phone 8,1

  • Windows Phone Silverlight 7,5

  • S ilverlight 4

  • Portable Class Libraries

ignorare ciò che esso modi sul targeting .Net 4.5. Questo è sbagliato. Il pacchetto riguarda l'utilizzo di HttpClient in .Net 4.0. Tuttavia, potrebbe essere necessario utilizzare VS2012 o versioni successive.Non sono sicuro che funzioni in VS2010, ma potrebbe valerne la pena.

+1

Utilizzando il link che hai fornito, sono stato in grado di realizzare finalmente il mio progetto! Grazie mille <3 – Smoore

+0

@Smoore. Sono contento che ci abbia aiutato. – stevethethread