C# HttpContent中ReadAsAsync方法的替代方法

C# HttpContent中ReadAsAsync方法的替代方法,c#,asp.net-mvc,asp.net-web-api,httpclient,C#,Asp.net Mvc,Asp.net Web Api,Httpclient,我正在使用ASP.MVC5项目中的rest服务。我按照教程使用HttpClient。由于HttpContent中不再提供ReadAsAsync方法,因此代码未编译。经过一番挖掘,我知道它是在System.Net.Http.Formatting.dll中定义的一种扩展方法。我找到了同一dll的nuget包,但该包已弃用,我无法安装它。我也试着根据帖子在ProgramFiles文件夹中搜索那个dll,但我找不到它。如何使ReadAsAsync工作?任何帮助都非常感激。谢谢。您需要做的是添加新的参考S

我正在使用ASP.MVC5项目中的rest服务。我按照教程使用HttpClient。由于HttpContent中不再提供
ReadAsAsync
方法,因此代码未编译。经过一番挖掘,我知道它是在
System.Net.Http.Formatting.dll
中定义的一种扩展方法。我找到了同一dll的nuget包,但该包已弃用,我无法安装它。我也试着根据帖子在ProgramFiles文件夹中搜索那个dll,但我找不到它。如何使
ReadAsAsync
工作?任何帮助都非常感激。谢谢。

您需要做的是添加新的参考
System.Net.HttpClient
System.Net.HttpClient.Formating

这是我在HttpClient中的示例代码:

以下代码用于使用HttpClient从saba获取证书

using System.Net.Http;
using System.Net.Http.Headers;
using GoSaba.Models.Saba;

namespace GoSaba.Controllers.Saba
{
    class LoginController
    {
        //HTTP GET: Saba/api/login
        public async Task<string> GetCertificate(string host, string user, string password, string site)
        {
            StringBuilder getCertificate = new StringBuilder();

            if(!string.IsNullOrEmpty(host))
            {
                using(var httpClient = new HttpClient())
                {
                    httpClient.BaseAddress = new Uri(string.Format("http://{0}/", host));
                    httpClient.DefaultRequestHeaders.Accept.Clear();
                    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    httpClient.DefaultRequestHeaders.Add("user", user);
                    httpClient.DefaultRequestHeaders.Add("password", password);
                    httpClient.DefaultRequestHeaders.Add("site", site);

                    HttpResponseMessage httpResponse = await httpClient.GetAsync("Saba/api/login");

                    if(httpResponse.IsSuccessStatusCode)
                    {
                        LoginModel.GetCertificate saba = await httpResponse.Content.ReadAsAsync<LoginModel.GetCertificate>();//LoginModel.GetCertificate is model.
                        getCertificate.Append(saba.certificate);
                    }
                }
            }

            return getCertificate.ToString();
        }
    }
}
使用System.Net.Http;
使用System.Net.Http.Header;
使用GoSaba.Models.Saba;
命名空间GoSaba.Controllers.Saba
{
类登录控制器
{
//HTTP-GET:Saba/api/login
公共异步任务GetCertificate(字符串主机、字符串用户、字符串密码、字符串站点)
{
StringBuilder getCertificate=新建StringBuilder();
如果(!string.IsNullOrEmpty(主机))
{
使用(var httpClient=new httpClient())
{
httpClient.BaseAddress=新Uri(string.Format(“http://{0}/”,host));
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
httpClient.DefaultRequestHeaders.Add(“用户”,user);
httpClient.DefaultRequestHeaders.Add(“密码”,password);
httpClient.DefaultRequestHeaders.Add(“site”,site);
HttpResponseMessage httpResponse=等待httpClient.GetAsync(“Saba/api/login”);
if(httpResponse.IsSuccessStatusCode)
{
LoginModel.GetCertificate saba=等待httpResponse.Content.ReadAsAsync();//LoginModel.GetCertificate是模型。
getCertificate.Append(saba.certificate);
}
}
}
返回getCertificate.ToString();
}
}
}

您可以在如何使用HttpClient中使用此引用。

添加引用并包括
System.Net.Http
System.Net.Http.Formating版本4.0.0.0我可以从哪里获取dll?有什么想法吗?我试图通过Packge管理控制台安装它,但它说“找不到包“System.Net.Http.Formatting”的版本“4.0.0.0”。我想它已经被弃用了。您的GAC中已经有了
Http.Formatting
。@TejasSutar右键单击您的项目>添加引用>程序集>并包含
System.Net.Http
System.Net.Http.Formatting
您的答案真的很有帮助@YuvalItzchakov。。!!谢谢。我的计算机上没有System.Net.Http.Formatting,安装它的是哪个.Net版本?它在我的工作计算机上,但不在我的家用计算机上。两者都安装了.Net 4.6.1。