Подтвердить что ты не робот

HttpClient не существует в .net 4.0: что я могу сделать?

Хорошо, я отредактировал мой код, я не получаю ошибок, но messageBox.Show не возвращает ничего пустого поля. Может быть, мне нужно добавить что-то в строку referrer? Я не понял, что такое реферер, и что я должен там положить. И у меня есть ключ, который уже использовал его в моем коде. Ключ - длинная строка, и я использую ее в своем коде, который я не использую с реферером. Почему это dosent перевод слова "привет"?

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;
            }
        }
    }
}
4b9b3361

Ответ 1

  • Вы можете использовать WebClient.

  • Или (если вам нужен более тонкий контроль над запросом) HttpWebRequest

  • Или HttpClient в System.Net.Http.dll.

Вот "перевод" на HttpWebRequest (нужен, а не WebClient, чтобы установить реферер). (Использует System.Net и 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
    }

Ответ 2

Я неоднократно использовал HttpClient в приложениях .NET 4.0. Если вы знакомы с NuGet, вы можете сделать Install-Package Microsoft.Net.Http, чтобы добавить его в свой проект. Подробнее см. Ссылку ниже.

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

Ответ 3

Ссылаясь на ответы выше, я только добавляю это, чтобы помочь прояснить ситуацию. Можно использовать HttpClient из .Net 4.0, и вам нужно установить пакет из здесь

Однако текст очень путается и противоречит самому себе.

Этот пакет не поддерживается в Visual Studio 2010 и требуется только для проектов, ориентированных на .NET Framework 4.5, Windows 8 или Windows Phone 8.1 при использовании библиотеки, использующей этот пакет.

Но под ним указано, что это поддерживаемые платформы.

Поддерживаемые платформы:

  • .NET Framework 4

  • Windows 8

  • Windows Phone 8.1

  • Windows Phone Silverlight 7.5

  • Silverlight 4

  • Портативные библиотеки классов

Игнорировать, что это такое о таргетинге .Net 4.5. Это не верно. Пакет все об использовании HttpClient в .Net 4.0. Однако вам может потребоваться использовать VS2012 или выше. Не уверен, что он работает в VS2010, но это может стоить тестирования.