好的我编辑了我的代码我没有得到错误但是messageBox.Show没有返回任何空框。 也许我需要在referrer字符串中添加一些东西?我不明白什么是推荐人,我应该把它放在那里。我有一个密钥已经在我的代码中使用它。 密钥是一个长字符串,我在我的代码中使用它我不与引用者一起使用。为什么它倾向于翻译“hi”这个词?
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;
}
}
}
}
答案 0 :(得分:67)
我曾多次在.NET 4.0应用程序中使用过HttpClient。如果您熟悉NuGet,可以使用Install-Package Microsoft.Net.Http将其添加到项目中。有关详细信息,请参阅以下链接。
答案 1 :(得分:46)
您可以使用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
}
答案 2 :(得分:14)
参考上面的答案,我只是添加这个来帮助澄清事情。可以使用.Net 4.0中的HttpClient,你必须从here安装包
然而,文本非常混乱并且自相矛盾。
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的方法。这是错的。该软件包是关于在.Net 4.0中使用HttpClient的。但是,您可能需要使用VS2012或更高版本。不确定它是否适用于VS2010,但这可能值得测试。
答案 3 :(得分:2)
读这个......
适用于.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
答案 4 :(得分:1)
同意TrueWill对一个单独答案的评论,我看到在当前Visual Studio下以.NET 4为目标的项目上使用system.web.http的最佳方法是Install-Package Microsoft.AspNet.WebApi.Client -Version 4.0.30506