【问题标题】:CS1503: Argument 2: cannot convert from ‘System.Net.Http.HttpContent’ to ‘System.Net.Http.HttpCompletionOption’CS1503:参数 2:无法从“System.Net.Http.HttpContent”转换为“System.Net.Http.HttpCompletionOption”
【发布时间】:2021-07-08 15:46:04
【问题描述】:

我正在尝试从服务调用另一个微服务的 get 方法。但是当我尝试这样做时,我收到了这个错误:

CS1503:参数 2:无法从“System.Net.Http.HttpContent”转换为“System.Net.Http.HttpCompletionOption”。

以下是源微服务中用于从目标服务获取数据列表的代码。

this._httpClient.DefaultRequestHeaders
           .Accept
           .Add(new MediaTypeWithQualityHeaderValue("application/json"));//ACCEPT header

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "relativeAddress");
request.Content = new StringContent(JsonConvert.SerializeObject(invoiceFilterRequest),
                                            Encoding.UTF8,
                                            "application/json");//CONTENT-TYPE header

var response = await this._httpClient.GetAsync(InvEndpoints.GET_Cus_List, request.Content).ConfigureAwait(false);

实际错误显示在GetAsync() 调用的第二个参数request.Content 中。

这里是目标服务方法:

[HttpGet("cus/filter")]
public async Task<ActionResult<PagedList<Inv>>> GetCusByFilterAsync(InvFilterRequest request)
{
    try
    {
        //..
    }
}

除了使用上述代码将对象作为查询字符串发送之外,还有什么简单的解决方案可以使用 HTTP GET 将对象作为参数发送到另一个微服务?

【问题讨论】:

标签: asp.net-core microservices httpclient webapi


【解决方案1】:

请检查GetAsync(String, HttpCompletionOption) method,当使用GetAsync方法时,第二个参数应该是HttpCompletionOption,而不是HttpContent

根据您的描述,您似乎想发送带参数的请求,如果是这种情况,您应该使用HttpClient.PostAsync method,而不是HttpClient.GetAsync方法,参考以下示例:

var companyForCreation = new CompanyForCreationDto
{
    Name = "Eagle IT Ltd.",
    Country = "USA",
    Address    = "Eagle IT Street 289"
};
var company = JsonSerializer.Serialize(companyForCreation);
var requestContent = new StringContent(company, Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync("companies", requestContent);
response.EnsureSuccessStatusCode();
var content = await response.Content.ReadAsStringAsync();
var createdCompany = JsonSerializer.Deserialize<CompanyDto>(content, _options);

参考:Make HTTP requests using IHttpClientFactory in ASP.NET Cor

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2019-10-26
    相关资源
    最近更新 更多