Что эквивалентно HttpClient JSON POST этому RestClient JSON POST? - PullRequest
1 голос
/ 06 июня 2019

Дано:

Uri location = ...; // Remote 3rd party HTTP Rest API
string body = "SOME JSON";

Следующий код RestClient генерирует HTTP-трафик, который принимается сервером.

var client = new RestClient(location);
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/json; charset=utf-8");
request.AddParameter("application/json; charset=utf-8", body, 
   ParameterType.RequestBody);
var restResponse = client.Execute(request);

Однако приведенный ниже код HttpClient должен генерировать другой HTTP-трафик (указанный сервером, отклонившим запрос).

using (var client = new HttpClient())
{
  var request = new HttpRequestMessage();
  request.Method = HttpMethod.Post;
  request.RequestUri = location;
  var bodyContent = new StringContent(body, Encoding.UTF8, "application/json");
  request.Content = bodyContent;
  request.Headers.Add("cache-control", "no-cache");
  client.Timeout = TimeSpan.FromMinutes(5.0);
  var response = await client.SendAsync(request);
}

Почему код HttpClient по-разному сериализуется?

1 Ответ

2 голосов
/ 06 июня 2019

Простой способ найти точные различия - запустить Fiddler или другой прокси-сервер отладки и проверить необработанный запрос.Вот что я получил с HttpClient:

POST http://example.com/ HTTP/1.1
cache-control: no-cache
Content-Type: application/json; charset=utf-8
Host: example.com
Content-Length: 4
Expect: 100-continue
Connection: Keep-Alive

test

А с RestSharp:

POST http://example.com/ HTTP/1.1
cache-control: no-cache
Content-Type: application/json; charset=utf-8
Accept: application/json, text/json, text/x-json, text/javascript, application/xml, text/xml
User-Agent: RestSharp/106.6.9.0
Host: example.com
Content-Length: 4
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

test

Ваши результаты могут отличаться в зависимости от конфигурации системы, версий и т. Д., Поэтому вы должны попробовать это самостоятельноубедитесь.

...