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