Кодирование передачи фрагментировано, а requestbody кодируется при использовании httpclient.postasync (uri, tparam, mediaformatter)

Я пытаюсь вызвать 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

Не могли бы вы упомянуть, как вы создаете параметры url, toSend, mediaTypeFormatter, поскольку определение для HttpClient.PostAsync - это HttpClient.PostAsync Method (String, HttpContent) - msdn.microsoft.com/en-us/library/hh138242(v=vs‌ .118) .aspx

MBB 11.09.2018 12:22

Обновил вопрос. Я использую HttpClientExtension. msdnGithub Вы можете посмотреть код здесь.

Zein Sleiman 11.09.2018 18:56

Проверьте, добавили ли вы client.DefaultRequestHeaders.TransferEncodingChunked = true; tr‌ y явно установив - client.DefaultRequestHeaders.TransferEncodingChunked = false; и попробовать!

MBB 11.09.2018 21:05

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

MBB 12.09.2018 06:31

Да, это сработает. Я взял тот же запрос от Fiddler и удалил кодировку и фрагменты, и он работает. Если вы установите для TransferEncoding значение false, он все равно установит его как true. Я попробую снова.

Zein Sleiman 12.09.2018 18:06

Пожалуйста, найдите ее подробности -stackoverflow.com/questions/35464233/…

MBB 12.09.2018 21:04

покажите, как создается HttpClient и как задается заголовок!

MBB 12.09.2018 21:35
0
7
465
0

Другие вопросы по теме