[英]Downgrade code of HttpClient .NET 4.5 to .NET 4.0
我有这个代码在.NET 4.5中运行良好。
var handler = new HttpClientHandler();
handler.UseDefaultCredentials = true;
handler.PreAuthenticate = true;
handler.ClientCertificateOptions = ClientCertificateOption.Automatic;
var client = new HttpClient(handler);
client.BaseAddress = new Uri("http://localhost:22678/");
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
var loginBindingModel = new LoginBindingModel { Password = "test01", UserName = "test01" };
var response = await client.PostAsJsonAsync("api/Account/Login", loginBindingModel);
response.EnsureSuccessStatusCode(); // Throw on error code.
tokenModel = await response.Content.ReadAsAsync<TokenModel>();
现在我必须在.NET 4.0中做同样的事情。
但我面临两个问题,我不知道如何解决它们。
client.PostAsJsonAsync
不存在。 client.PostAsync
,它需要HttpContext
。 我在WPF客户端内请求...伙计们,我不知道我能做些什么来存档相同的功能......
请帮忙!
建议使用BCL / async /“Microsoft HTTP Client Libraries”帮助程序项目“补充”.Net 4.0与.Net 4.5具有相同的功能(可以在NuGet包管理器中找到最新版本。)有关详细信息,请参阅以下链接: http://www.nuget.org/packages/microsoft.bcl.async (注意:您可以通过相同的基本机制获得对http客户端的支持)
对于那些正在寻找相同.NET 4.0纯解决方案的人来说,我发现代码工作正常。 但它没有ASYNC/AWAIT
应该实现的东西。 无论如何,它的工作方式与问题中的代码完全相同。
var webAddr = "http://localhost:22678/api/Account/Login";
var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
httpWebRequest.ContentType = "application/json; charset=utf-8";
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
var loginBindingModel = new WebAPILoginBindingModel { Password = "test01", UserName = "test01" };
var myJsonString = Newtonsoft.Json.JsonConvert.SerializeObject(loginBindingModel);
streamWriter.Write(myJsonString);
streamWriter.Flush();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
如果要使用ASYNC / AWAIT for .NET 4.0,则必须安装Microsoft.BCL dll并使用HttpClient的异步版本 。
即使安装了以下软件包,我也会遇到其他错误。
Install-Package Microsoft.Net.Http
Install-Package System.Net.Http.Formatting.Extension
结果Install-Package System.Net.Http.Formatting.Extension
安装不支持dot net 4的system.net版本。所以我必须坚持PostAsync
并从我的自定义对象创建一个httpContent对象。
所以
PostAsJsonAsync("api/Account/Login", loginBindingModel)
成为(注意我在这里使用json.net)
public HttpContent CreateHttpContent(object data)
{
return new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");
}
PostAsync("api/Account/Login",CreateHttpContent(loginBindingModel))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.