60

コードを編集しましたが、エラーは発生しませんが、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;
            }
        }
    }
}
4

5 に答える 5

80

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

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

于 2012-08-10T04:57:57.903 に答える
49
  • 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
    }
于 2012-04-25T02:29:35.243 に答える
19

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

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

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

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

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

  • .NET フレームワーク 4

  • ウィンドウズ8

  • Windows Phone 8.1

  • Windows Phone シルバーライト 7.5

  • シルバーライト 4

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

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

于 2014-11-05T16:37:45.753 に答える
2

これを読む...

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

段落を参照してください.NET Framework 4.0 または Windows Phone 7.5 で HttpClient を使用 する.aspx

于 2015-08-25T13:01:48.410 に答える