C# 我正在寻找IHttpClientFactory->;HttpMethod.Post示例

C# 我正在寻找IHttpClientFactory->;HttpMethod.Post示例,c#,.net,api,httpclient,C#,.net,Api,Httpclient,我想使用IHttpClientFactory来使用我的API 关于如何使用SendAsync从API请求数据,有很多示例,但是如果我想使用IHttpClientFactory发布数据,该怎么办 我试过这样的东西,但是我在哪里通过这个物体呢 var request = new HttpRequestMessage(HttpMethod.Post, "https://localhost:44357/api/users/validateuser"); var client = _httpClient

我想使用IHttpClientFactory来使用我的API

关于如何使用SendAsync从API请求数据,有很多示例,但是如果我想使用IHttpClientFactory发布数据,该怎么办

我试过这样的东西,但是我在哪里通过这个物体呢

var request = new HttpRequestMessage(HttpMethod.Post, "https://localhost:44357/api/users/validateuser");

var client = _httpClientFactory.CreateClient();

var response = await client.SendAsync(request);

下面是一个POST示例,它将一个序列化对象传递给API,并接收回JSON进行反序列化:

var result;

try
{
    HttpClient client = _httpClientFactory.CreateClient("MyAPI");
    //2 minute timeout on wait for response
    client.Timeout = new TimeSpan(0, 2, 0);
    //Create an HttpRequestMessage object and pass it into SendAsync()
    HttpRequestMessage message = new HttpRequestMessage();
    message.Headers.Add("Accept", "application/json");
    message.Content = new StringContent(JsonConvert.SerializeObject(myObj), System.Text.Encoding.UTF8, "application/json");
    message.Method = HttpMethod.Post;
    message.RequestUri = new Uri(client.BaseAddress.ToString() + "someapiendpoint");

    HttpResponseMessage response = await client.SendAsync(message);
    result = await response.Content.ReadAsStringAsync();
    //deserialize the result into proper object type
}
catch (Exception ex)
{
    //Log exception
}
Content
HttpContent
的类型,它是一个抽象类,您无法实例化它,但有多个类继承自它:

ByteArrayContent
MultipartContent
ReadOnlyMemoryContent
StreamContent
FormUrlEncodedContent
MultipartFormDataContent
StringContent
。最常见的是
StringContent
,因此可以使用任何类型的JSON序列化程序(
Newtonsoft
System.Text.JSON
序列化程序等)将C#对象序列化为JSON字符串。 带有
Newtonsoft.Json
的示例:

using Newtonsoft.Json;


var jsonContent = JsonConvert.SerializeObject(object);
request.Content = new StringContent(jsonContent);

虽然此代码唯一的答案实际上可能会回答用户的问题,但最好在其中包含一个解释,以便其他用户能够在原始问题的上下文中理解这意味着什么。@Christine感谢您的明智评论!在我的回答中增加了更好的描述。你的解释有很大的缺陷。
using Newtonsoft.Json;


var jsonContent = JsonConvert.SerializeObject(object);
request.Content = new StringContent(jsonContent);