2012-04-25 17 views
42

Ok i edytowałem mój kod, ale nie dostaję błędów, ale messageBox.Show nic nie zwraca pustego pola. Może muszę dodać coś w ciągu odsyłającym? Nie rozumiem, co to jest polecający i co powinienem tam umieścić. I mam klucz już używam go w moim kodzie. Klucz jest długim ciągiem i używam go w moim kodzie, którego nie używam ze stroną odsyłającą. Dlaczego to wyrażenie tłumaczy słowo "cześć"?HttpClient nie istnieje w .net 4.0: co mogę zrobić?

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

tytułem tego pytania jest bardzo jasne, ale samo pytanie jest niejasne. Wprawdzie pokazuje wysiłek badawczy, ale to wszystko. Powinien istnieć przynajmniej kontekst kontekstu, zamiast pozwolić czytelnikowi się domyślić. Widziałem, że zredagowałeś własne pytanie, powinieneś ponownie, ale upewnij się, że wynik końcowy jest czytelny dla nowo przybyłego. Pytania mają wartość na dłuższą metę, ale uczestnicy muszą to umożliwić. –

Odpowiedz

39

Oto "tłumaczenie" do HttpWebRequest (potrzebne raczej niż WebClient, aby ustawić stronę odsyłającą). (Używa System.Net i 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 znam tego WebClienta i httpwebrequesta, ale nie wiem jak go używać w moim kodzie zamiast httpclient ... czy możesz mi pokazać jak to zrobić w moim kodzie? Dzięki. – user1352869

+0

System.Web.Http jest dla .net 4.5 i mam 4.0 im używać Visual Studio csharp pro 2010 i nie mam .net 4.5 – user1352869

+0

@ user1352869 gotcha. Zobacz moją aktualizację. – McGarnagle

60

Użyłem HttpClient w .NET 4.0 aplikacji na wielu okazjach. Jeśli znasz NuGet, możesz zainstalować pakiet Microsoft.Net.Http, aby dodać go do swojego projektu. Zobacz poniższy link, aby uzyskać więcej informacji.

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

+2

JFYI: to nie zadziała z Mono - właśnie znalazłem to :( – avs099

+0

tak ... dla mono możesz użyć HttpWebRequest – cecilphillip

+0

To również mówi "Ten pakiet nie jest obsługiwany w Visual Studio 2010, i jest wymagany tylko dla projektów kierujących .NET Framework 4.5 "Czy wiesz, jaka jest różnica między tym pakietem, a http://www.nuget.org/packages/HttpClient? – ChrisW

12

Odnosząc się do powyższych odpowiedzi, jestem tylko dodanie tego przyczynić się do wyjaśnienia sprawy. Możliwe jest użycie HttpClient z .Net 4.0, i musisz zainstalować pakiet od here

Jednak tekst jest bardzo niejasny i sam w sobie zaprzecza.

Ten pakiet nie jest obsługiwana w Visual Studio 2010 i jest wymagany tylko w przypadku projektów ukierunkowanych na .NET Framework 4.5, Windows 8 i Windows Phone 8.1 po spożyciu bibliotekę, która używa tego pakietu.

Pod tym jednak opisem stwierdza się, że są to obsługiwane platformy.

Obsługiwane platformy:

  • .NET Framework 4

  • systemu Windows 8

  • Windows Phone 8,1

  • Windows Phone Silverlight 7,5

  • S ilverlight 4

  • przenośne bibliotek klas

Ignoruj, co to sposoby o kierowanie .NET 4.5. To jest źle. Pakiet polega na użyciu HttpClient w .Net 4.0. Jednak może być konieczne użycie VS2012 lub nowszego.Nie wiem, czy działa w VS2010, ale może warto przetestować.

+1

Korzystając z podanego linku, udało mi się uzyskać mój projekt, aby w końcu go zbudować! Dziękuję bardzo <3 – Smoore

+0

@Smoore. Cieszę się, że to pomogło. – stevethethread