web-dev-qa-db-ja.com

HttpClientは.net 4.0には存在しません:どうすればよいですか?

OK、コードを編集しましたが、エラーは表示されませんが、messageBox.Showは空のボックスを返しません。リファラー文字列に何かを追加する必要があるかもしれませんか?リファラーとは何か、そこに何を置くべきか理解できませんでした。そして、私はすでにコードでそれを使用しているキーを持っています。キーは長い文字列であり、リファラーで使用しないコードで使用しています。なぜ「こんにちは」という言葉を翻訳しないのですか?

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;
            }
        }
    }
}
51
user1352869
  • WebClient を使用できます。

  • または(リクエストをよりきめ細かく制御する必要がある場合) HttpWebRequest

  • または、System.Net.Http.dllの HttpClient .

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
    }
46
McGarnagle

.NET 4.0アプリケーションでHttpClientを何度も使用しました。 NuGetに精通している場合は、Install-Package Microsoft.Net.Httpを実行してプロジェクトに追加できます。詳細については、以下のリンクを参照してください。

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

68
cecilphillip

上記の答えを参照して、これは物事を明確にするためにのみ追加しています。 .Net 4.0からHttpClientを使用することが可能であり、パッケージを here からインストールする必要があります

ただし、このテキストは非常に混乱しており、矛盾しています。

このパッケージはVisual Studio 2010ではサポートされていません。このパッケージを使用するライブラリを使用する場合、.NET Framework 4.5、Windows 8、またはWindows Phone 8.1を対象とするプロジェクトにのみ必要です。

しかし、その下には、これらがサポートされているプラ​​ットフォームであると記載されています。

サポートされているプラ​​ットフォーム:

  • .NET Framework 4

  • ウィンドウズ8

  • Windows Phone 8.1

  • Windows Phone Silverlight 7.5

  • Silverlight 4

  • ポータブルクラスライブラリ

.Net 4.5をターゲットにする場合の方法を無視します。これは間違っています。パッケージは、.Net 4.0でのHttpClientの使用に関するものです。ただし、VS2012以降を使用する必要がある場合があります。 VS2010で動作するかどうかはわかりませんが、テストする価値があるかもしれません。

14
stevethethread

これを読む...

。NET FrameworkおよびWindows Phone用のポータブルHttpClient

.NET Framework 4.0またはWindows Phone 7.5でのHttpClientの使用を参照してくださいhttp://blogs.msdn.com/b/bclteam/archive/2013 /02/18/portable-httpclient-for-net-framework-and-windows-phone.aspx

2
acor3

別の回答に関するTrueWillのコメントに同意すると、現在のVisual Studioで.NET 4をターゲットにしたプロジェクトでsystem.web.httpを使用するのに私が見た最良の方法はInstall-Package Microsoft.AspNet.WebApi.Client -Version 4.0.30506

1
Jeremy Murray