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;
}
}
}
}
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
}
.NET 4.0アプリケーションでHttpClientを何度も使用しました。 NuGetに精通している場合は、Install-Package Microsoft.Net.Httpを実行してプロジェクトに追加できます。詳細については、以下のリンクを参照してください。
上記の答えを参照して、これは物事を明確にするためにのみ追加しています。 .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で動作するかどうかはわかりませんが、テストする価値があるかもしれません。
これを読む...
。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
別の回答に関するTrueWillのコメントに同意すると、現在のVisual Studioで.NET 4をターゲットにしたプロジェクトでsystem.web.httpを使用するのに私が見た最良の方法はInstall-Package Microsoft.AspNet.WebApi.Client -Version 4.0.30506