Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有HttpContent.ReadAsAsync<;T>;方法是否已在.NET Core中被取代?_C#_Asp.net Core_Httpresponse - Fatal编程技术网

C# 具有HttpContent.ReadAsAsync<;T>;方法是否已在.NET Core中被取代?

C# 具有HttpContent.ReadAsAsync<;T>;方法是否已在.NET Core中被取代?,c#,asp.net-core,httpresponse,C#,Asp.net Core,Httpresponse,以下引用了一个.NET核心应用程序,其依赖项如下所示 Microsoft.NETCore.App Microsoft.AspNet.WepApi.Client (5.2.7) Microsoft.com上的文档是2017年11月起从.NET客户端(C#)调用Web API的 链接 在文档中是HTTP GET的客户端调用 static HttpClient client = new HttpClient(); static async Task<Product> Ge

以下引用了一个.NET核心应用程序,其依赖项如下所示

Microsoft.NETCore.App
Microsoft.AspNet.WepApi.Client (5.2.7)
Microsoft.com上的文档是2017年11月起从.NET客户端(C#)调用Web API的

链接

在文档中是HTTP GET的客户端调用

    static HttpClient client = new HttpClient();
    static async Task<Product> GetProductAsync(string path)
    {
        Product product = null;
        HttpResponseMessage response = await client.GetAsync(path);
        if (response.IsSuccessStatusCode)
        {
            product = await response.Content.ReadAsAsync<Product>();
        }
        return product;
    }
statichttpclient=newhttpclient();
静态异步任务GetProductAsync(字符串路径)
{
Product=null;
HttpResponseMessage response=wait client.GetAsync(路径);
if(响应。IsSuccessStatusCode)
{
product=wait response.Content.ReadAsAsync();
}
退货产品;
}
response.Content
指的是
HttpContent
对象。至少根据以下文档,截至2020年7月,
HttpContent
没有签名为
ReadAsAsync()
的实例方法。但是,这个实例方法是有效的

指向不存在签名为
ReadAsAsync()的实例方法的引用链接。。。

有一个静态方法
HttpContentExtensions.ReadAsAsync(myContent)
其中
myContent
指的是
HttpContent
对象。这种静态方法也有效

参考链接。。。

例如,一个记录的签名具有

静态图标后接
ReadAsAsync(HttpContent)

以及一个说明,说明它将返回
任务
。此静态方法可能是实例方法的幕后实现

然而,在静态方法网页的顶部有信息表明。。。 “我们不再定期更新此内容。有关如何支持此产品、服务、技术或API的信息,请查看Microsoft产品生命周期。”


在.NET Core 3.1中,实例和静态两种形式的HttpContent.ReadAsAsync()是否已被取代?

我无法从代码中判断它是否是实例方法,但可能是

您包含的链接在.NET4.x和.NETCore之间交替出现,您是否意识到这一点尚不清楚。用日期标记它们意味着一个线性过程,但我们有一个岔路口

也就是说,它被“降级”为驻留在一个额外的包中,因为它将被更少地使用。在.NETCore中,我们现在有了直接作用于HttpClient的类似扩展方法


为了在.NETCore3.x中使用它,您可能需要添加
System.net.Http.Json
nuget包。这些扩展只适用于
System.Text.Json
,对于Newtonsoft,您必须使用传统的代码模式



截至2020年7月,.NET Core 3.1在线文档中似乎没有HttpClientJsonExtensions。

我最近使用的东西,我必须安装Newtonsoft.Json

string responseContent = await response.Content.ReadAsStringAsync();
var productResult = JsonConverter.DeserializeObject<Product>(responseContent);
string responseContent=wait response.Content.ReadAsStringAsync();
var productResult=JsonConverter.DeserializeObject(responseContent);
事实上,我在微软关于如何使用RESTAPI的文档中发现了这一点,而且很有效。您的代码在get部分是正常的,假设它具有正确的Uri


还有一点需要注意的是我的代码不是静态的

其他答案不正确

ReadAsAsync方法是System.Net.Http.Formatting.dll的一部分

这又是nuget的一部分:Microsoft.AspNet.WebApi.Client

我刚刚创建了一个新的控制台项目.NETCore3.1,并添加了2个NUGET

  • 纽顿软件
  • Microsoft.AspNet.WebApi.Client
  • 我使用.NET Core 3.1创建了一个项目,以下是一些图片:

    这是我的项目文件:

    这是我刚刚编写的代码,编译得很好:

    using System;
    using System.Net.Http;
    using System.Net.Http.Headers;
    using System.Threading.Tasks;
    
    namespace Custom.ApiClient
    {
        internal static class WebApiManager
        {
            //private const string _requestHeaderBearer = "Bearer";
            private const string _responseFormat = "application/json";
    
            private static readonly HttpClient _client;
    
            static WebApiManager()
            {
    
                // Setup the client.
                _client = new HttpClient { BaseAddress = new Uri("api url goes here"), Timeout = new TimeSpan(0, 0, 0, 0, -1) };
    
                _client.DefaultRequestHeaders.Accept.Clear();
                _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(_responseFormat));
    
                // Add the API Bearer token identifier for this application.
                //_client.DefaultRequestHeaders.Add(RequestHeaderBearer, ConfigHelper.ApiBearerToken);       
            }
    
            public static async Task<T> Get<T>()
            {
                var response = _client.GetAsync("api extra path and query params go here");
    
                return await ProcessResponse<T>(response);
            }
    
            private static async Task<T> ProcessResponse<T>(Task<HttpResponseMessage> responseTask)
            {
                var httpResponse = await responseTask;
    
                if(!httpResponse.IsSuccessStatusCode)
                    throw new HttpRequestException(httpResponse.ToString());
    
                var dataResult = await httpResponse.Content.ReadAsAsync<T>();
    
                return dataResult;
            }
        
        }
    }
    
    使用系统;
    使用System.Net.Http;
    使用System.Net.Http.Header;
    使用System.Threading.Tasks;
    命名空间Custom.ApiClient
    {
    内部静态类WebAPI管理器
    {
    //private const string _requestHeaderBearer=“Bearer”;
    私有常量字符串_responseFormat=“application/json”;
    私有静态只读HttpClient\u客户端;
    静态webapimager()
    {
    //设置客户端。
    _client=newhttpclient{BaseAddress=newuri(“这里是api url”),Timeout=newtimespan(0,0,0,0,-1)};
    _client.DefaultRequestHeaders.Accept.Clear();
    _client.DefaultRequestHeaders.Accept.Add(新MediaTypeWithQualityHeaderValue(_responseFormat));
    //添加此应用程序的API承载令牌标识符。
    //_client.DefaultRequestHeaders.Add(requestHeaderBeaer、ConfigHelper.ApiberToken);
    }
    公共静态异步任务Get()
    {
    var response=_client.GetAsync(“api额外路径和查询参数转到此处”);
    返回等待处理响应(response);
    }
    专用静态异步任务ProcessResponse(任务响应任务)
    {
    var httpResponse=等待响应任务;
    如果(!httpResponse.IsSuccessStatusCode)
    抛出新的HttpRequestException(httpResponse.ToString());
    var dataResult=await httpResponse.Content.ReadAsAsync();
    返回数据结果;
    }
    }
    }
    
    更新:

    清除有关包Microsoft.AspNet.WebApi.Client的依赖项的一些混淆

    这是一张从2020年10月27日起显示依赖关系的图片,清楚地表明它依赖于Newtonsoft JSON 10或更高版本。到目前为止,还没有使用System.Text.Json替换ReadAsAsync的版本。。。因此,您可以使用ApiClient+Newtonsoft Json,也可以使用System.Text.Json创建自己的Json


    如果您不想安装第三方nuget软件包,那么为其实现扩展方法并不太困难

    例如,使用
    System.Text.Json

    使用System.Net.Http;
    使用System.Text.Json;
    使用系统