将HttpClient .NET 4.5的代码降级到.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(); 

现在我必须在.NET 4.0中做同样的事情。

但我面临两个问题,我不知道如何解决它们。

  1. 在.NET 4.0中。 方法client.PostAsJsonAsync不存在。
  2. 现有的方法是client.PostAsync ,它需要HttpContext

在此处输入图像描述

我在WPF客户端内请求…伙计们,我不知道我可以做些什么来归档相同的function……

请帮忙!

建议使用BCL / async /“Microsoft HTTP Client Libraries”帮助程序项目“补充”.Net 4.0与.Net 4.5具有相同的function(可以在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))