web-dev-qa-db-fra.com

HttpClient n'existe pas dans .net 4.0: que puis-je faire?

Ok j'ai édité mon code je ne reçois pas d'erreurs mais le messageBox.Show ne renvoie rien de case vide . Peut-être que j'ai besoin d'ajouter quelque chose dans la chaîne de référence? Je ne comprenais pas quel est le référent et que devrais-je mettre là. Et j’ai déjà une clé qui m’utilise déjà dans mon code… .. La clé est une longue chaîne et m’utilise dans mon code que je n’utilise pas avec le référant. Pourquoi est-ce qu'il traduit le mot "salut"?

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;
            }
        }
    }
}
50
user1352869

Voici une "traduction" de HttpWebRequest (nécessaire plutôt que WebClient pour définir le référent). (Utilise System.Net et 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
    }
45
McGarnagle

J'ai utilisé HttpClient dans les applications .NET 4.0 à de nombreuses reprises. Si vous connaissez NuGet, vous pouvez créer un package d'installation Microsoft.Net.Http pour l'ajouter à votre projet. Voir le lien ci-dessous pour plus de détails.

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

67
cecilphillip

En me référant aux réponses ci-dessus, je ne fais qu'ajouter ceci pour aider à clarifier les choses. Il est possible d'utiliser HttpClient à partir de .Net 4.0, et vous devez installer le package à partir de ici

Cependant, le texte est très confus et se contredit. 

Ce package n'est pas pris en charge dans Visual Studio 2010 et n'est requis que pour les projets ciblant .NET Framework 4.5, Windows 8 ou Windows Phone 8.1 lors de l'utilisation d'une bibliothèque utilisant ce package.

Mais en dessous, il est indiqué qu'il s'agit des plates-formes prises en charge.

Plateformes supportées:

  • .NET Framework 4

  • Windows 8

  • Windows Phone 8.1

  • Windows Phone Silverlight 7.5

  • Silverlight 4

  • Bibliothèques de classes portables

Ignorer les méthodes de ciblage .Net 4.5. C'est faux. Le paquet concerne l’utilisation de HttpClient dans .Net 4.0. Cependant, vous devrez peut-être utiliser VS2012 ou une version ultérieure. Je ne sais pas si cela fonctionne dans VS2010, mais cela peut valoir la peine d'être testé.

14
stevethethread

lis ça...

Portable HttpClient pour .NET Framework et Windows Phone

voir le paragraphe Utilisation de HttpClient sur .NET Framework 4.0 ou Windows Phone 7.5http://blogs.msdn.com/b/bclteam/archive/2013/02/18/portable-httpclient- pour-net-framework-and-windows-phone.aspx

2
acor3

En accord avec le commentaire de TrueWill sur une réponse distincte, le meilleur moyen que j'ai vu d'utiliser system.web.http sur un projet ciblé .NET 4 sous Visual Studio actuel est Install-Package Microsoft.AspNet.WebApi.Client -Version 4.0.30506

0
Jeremy Murray