Я ищу IHttpClientFactory -> HttpMethod.Post пример - PullRequest
0 голосов
/ 06 января 2020

Я хочу использовать IHttpClientFactory для использования моего API.

Существует множество примеров того, как вы можете использовать SendAsyn c для запроса данных из API, но что если я хочу опубликовать данные с помощью IHttpClientFactory?

Я пробовал что-то подобное, но тогда куда мне передать объект?

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

var client = _httpClientFactory.CreateClient();

var response = await client.SendAsync(request);

Ответы [ 2 ]

2 голосов
/ 06 января 2020

Вот пример 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
}
0 голосов
/ 06 января 2020
var request = new HttpRequestMessage(HttpMethod.Post, "https://localhost:44357/api/users/validateuser");

request.Content = foo; //is where you pass the payload

Content - это тип HttpContent, который является абстрактным классом, экземпляр которого вы не можете создать, но у вас есть несколько классов, наследующих его:

ByteArrayContent, MultipartContent, ReadOnlyMemoryContent, StreamContent, FormUrlEncodedContent, MultipartFormDataContent и StringContent. Наиболее распространенным является StringContent, так что вы можете сериализовать ваш C# объект в строку JSON, используя любой тип JSON сериализатора (Newtonsoft, System.Text.Json serializer, et c). Пример с Newtonsoft.Json:

using Newtonsoft.Json;


var jsonContent = JsonConvert.SerializeObject(object);
request.Content = new StringContent(jsonContent);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...