Кодирование передачи Chuncked и RequestBody кодируется при использовании HttpClient.PostAsync (uri, TParam, MediaFormatter) - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь вызвать API с помощью HttpClient.PostAsync и получаю неверный запрос. Я проверил Fiddler и вижу, что запрос тела кодируется, а Transfer-Encoding: Chunked в заголовке.

response = Client.PostAsync(url, toSend, mediaTypeFormatter).Result;

toSend это класс

[DataContract]
public class OAuthRequestBody
{
    [DataMember(Name = "grant_type")]
    public string GrantType { get; set; }
    [DataMember(Name = "tpl")]
    public string Tpl { get; set; }
    [DataMember(Name = "user_login_id")]
    public string UserLogin { get; set; }
}

В этом случае Mediaformatter - это Json, но он может быть другим, и поэтому мы не используем JsonFormatter.

Когда я проверяю textView в Fiddler, я вижу это:

 66
{"grant_type":"client_credentials","tpl":"{number}","user_login_id":"x"}
0

Я не понимаю, откуда поступают 66 и 0.

The Raw Headers:
POST http://example.com/token
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json; charset=utf-8
Accept: application/json
Accept-Encoding: gzip, deflate
Authorization: Basic FancyLongBase64
Host: example.com

66
{"grant_type":"client_credentials","tpl":"{number}","user_login_id":"x"}
0

Я пробовал несколько способов, но кажется, что кодировка всегда там. Может быть, есть какая-то конфигурация.

Построение запроса:

var body = new OAuthRequestBody
                {
                    GrantType = "client_credentials",
                    Tpl = Tpl,
                    UserLogin = "1"
                };

mediaTypeFormatter = new JsonMediaTypeFormatter();

url = "/token" //Not the actual path but same idea
...