Как отправить JSon с токеном на предъявителя - PullRequest
0 голосов
/ 03 апреля 2019

Я могу сделать GET с похожим кодом и токеном на предъявителя, но, похоже, не могу выполнить POST.

Когда я копирую / вставляю Json, URL и токен на предъявителя в Почтальон, он отлично работает.Но при выполнении этого из C # я получаю эту ошибку:

"StatusCode: 400, ReasonPhrase: 'Bad Request', Версия: 1.1, Content: System.Net.Http.StreamContent, Заголовки: {Кодирование передачи: chunked Соединение: keep-alive Expect-CT: max-age = 604800, report-uri = "https://report -uri.cloudflare.com / cdn-cgi / beacon / wait-ct" CF-RAY: 4c190ad8ad786539-SYD Дата: среда, 03 апреля 2019 г. 06:38:54 GMT Set-Cookie: __cfduid = dc0232e99fa0fefc0bd728258229dd5d51554273534; истекает = чт, 02-апр-20 06:38:54 GMT; путь = /; домен = .paymentsapi.io;HttpOnly; защищенный сервер: cloudflare X-Powered-By: ASP.NET Content-Type: application / json; charset = utf-8} "

Может кто-нибудь увидеть, что я делаю не так?

Заранее спасибо.

JsonSerializerSettings jss = new JsonSerializerSettings();
string strValue = JsonConvert.SerializeObject(TestMaster, jss);
lblJSon.Text = strValue;        // This Json is valid
ByteArrayContent bytecontent = new ByteArrayContent(System.Text.Encoding.UTF8.GetBytes(strValue));
bytecontent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

string AccessToken = lblToken.Text;

HttpClient tRequest = new HttpClient();
tRequest.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AccessToken);

Task<HttpResponseMessage> getTask = tRequest.PostAsJsonAsync(new Uri(strURL).ToString(), bytecontent);

HttpResponseMessage urlContents = await getTask;

Console.WriteLine("urlContents.ToString");
lblEDDR.Text = urlContents.ToString();

1 Ответ

2 голосов
/ 03 апреля 2019

PostAsJsonAsync преобразует ваш ByteArrayContent в объект json. Вы можете использовать эфир PostAsJsonAsync напрямую с вашим TestMaster следующим образом:

string AccessToken = lblToken.Text;

HttpClient tRequest = new HttpClient();
tRequest.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AccessToken);

Task<HttpResponseMessage> getTask = tRequest.PostAsJsonAsync(new Uri(strURL).ToString(), TestMaster);

HttpResponseMessage urlContents = await getTask;

Console.WriteLine("urlContents.ToString");
lblEDDR.Text = urlContents.ToString();

Или вы конвертируете TestMaster в Json и используете PostAsync с объектом StringContent. Вот так:

JsonSerializerSettings jss = new JsonSerializerSettings();
string strValue = JsonConvert.SerializeObject(TestMaster, jss);
lblJSon.Text = strValue;        // This Json is valid
StringContent strcontent = new StringContent (strValue);
bytecontent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

string AccessToken = lblToken.Text;

HttpClient tRequest = new HttpClient();
tRequest.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AccessToken);

Task<HttpResponseMessage> getTask = tRequest.PostAsync(new Uri(strURL).ToString(), bytecontent);

HttpResponseMessage urlContents = await getTask;

Console.WriteLine("urlContents.ToString");
lblEDDR.Text = urlContents.ToString();
...