2012-04-25 19 views
42

Ok tôi đã chỉnh sửa mã của tôi tôi không nhận được lỗi nhưng messageBox.Show không trả lại hộp trống. Có lẽ tôi cần phải thêm một cái gì đó trong chuỗi liên kết giới thiệu? Tôi không hiểu lời giới thiệu là gì và tôi nên đặt cái gì ở đó. Và tôi có một chìa khóa đã im sử dụng nó trong mã của tôi. Chìa khóa là một chuỗi dài và im sử dụng nó trong mã của tôi tôi không sử dụng với liên kết giới thiệu. Tại sao nó lại dịch từ "hi"?HttpClient không tồn tại trong .net 4.0: Tôi có thể làm gì?

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

Tiêu đề của câu hỏi này là rất rõ ràng, nhưng câu hỏi chính nó là không rõ ràng. Phải thừa nhận rằng nó cho thấy nỗ lực nghiên cứu, nhưng đó là tất cả. Nên có ít nhất một câu ngữ cảnh thay vì để người đọc tìm ra. Tôi thấy bạn đã chỉnh sửa câu hỏi của riêng bạn, bạn nên một lần nữa nhưng hãy chắc chắn rằng kết quả cuối cùng là có thể đọc được cho một người mới. Câu hỏi có giá trị về lâu dài, nhưng người tham gia phải làm cho nó có thể. –

Trả lời

39
  • Bạn có thể sử dụng WebClient.

  • Hoặc (nếu bạn cần kiểm soát nhiều hạt mịn hơn theo yêu cầu) HttpWebRequest

  • Hoặc, HttpClient trong System.Net.Http.dll.

Đây là "bản dịch" để HttpWebRequest (cần thiết thay vì WebClient để đặt liên kết giới thiệu). (Sử dụng System.Net và 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 tôi biết điều này WebClient và httpwebrequest nhưng tôi không biết làm thế nào để sử dụng nó trong mã của tôi thay vì httpclient ... bạn có thể chỉ cho tôi làm thế nào để làm điều đó trong mã của tôi? Cảm ơn. – user1352869

+0

System.Web.Http dành cho .net 4.5 i có 4.0 im sử dụng visual studio csharp pro 2010 và tôi không có .net 4.5 – user1352869

+0

@ user1352869 gotcha. Vui lòng xem cập nhật của tôi. – McGarnagle

60

Tôi đã sử dụng các ứng dụng HttpClient trong .NET 4.0 nhiều lần. Nếu bạn đã quen thuộc với NuGet, bạn có thể cài đặt Microsoft.Net.Http Install-Package để thêm nó vào dự án của bạn. Xem liên kết bên dưới để biết thêm chi tiết.

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

+2

JFYI: điều này sẽ không hoạt động với Mono - chỉ tìm thấy điều này: ( – avs099

+0

yea ... cho mono bạn có thể sử dụng HttpWebRequest – cecilphillip

+0

Nó cũng nói "Gói này không được hỗ trợ trong Visual Studio 2010 và chỉ bắt buộc đối với các dự án nhắm mục tiêu .NET Framework 4.5 "Bạn có biết sự khác biệt giữa gói này không, và http://www.nuget.org/packages/HttpClient? – ChrisW

12

Đề cập đến những câu trả lời ở trên, tôi chỉ thêm này để giúp làm rõ sự vật. Bạn có thể sử dụng HttpClient từ .Net 4.0 và bạn phải cài đặt gói từ here

Tuy nhiên, văn bản rất nhầm lẫn và mâu thuẫn với chính nó.

Gói này không được hỗ trợ trong Visual Studio 2010 và chỉ bắt buộc đối với các dự án nhắm mục tiêu .NET Framework 4.5, Windows 8 hoặc Windows Phone 8.1 khi sử dụng thư viện sử dụng gói này.

Nhưng bên dưới nó cho biết đây là những nền tảng được hỗ trợ.

Nền tảng hỗ trợ:

  • .NET Framework 4

  • của Windows 8

  • Windows Phone 8,1

  • Windows Phone Silverlight 7,5

  • S ilverlight 4

  • xách tay Class Libraries

Bỏ qua những gì nó cách về nhắm mục tiêu Net 4.5. Cái này sai. Gói này là tất cả về cách sử dụng HttpClient trong .Net 4.0. Tuy nhiên, bạn có thể cần phải sử dụng VS2012 trở lên.Không chắc chắn nếu nó hoạt động trong VS2010, nhưng đó có thể là giá trị thử nghiệm.

+1

Sử dụng liên kết bạn đã cung cấp, tôi đã có thể hoàn thành dự án của mình để xây dựng! Cảm ơn bạn rất nhiều <3 – Smoore

+0

@Smoore. Vui mừng nó đã giúp. – stevethethread

Các vấn đề liên quan