如何使用 Bearer Token POST JSon
How to POST JSon with a Bearer Token
我可以使用类似的代码和 Bearer Token 执行 GET,但似乎无法执行 POST。
当我 copy/paste 将 Json、URL 和 Bearer Token 放入 Postman 时,它工作得很好。但是从 C# 执行此操作时出现此错误:
"StatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content:
System.Net.Http.StreamContent, Headers: { Transfer-Encoding: chunked
Connection: keep-alive Expect-CT: max-age=604800,
report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
CF-RAY: 4c190ad8ad786539-SYD Date: Wed, 03 Apr 2019 06:38:54 GMT
Set-Cookie: __cfduid=dc0232e99fa0fefc0bd728258229dd5d51554273534;
expires=Thu, 02-Apr-20 06:38:54 GMT; path=/; domain=.paymentsapi.io;
HttpOnly; Secure Server: 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();
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();
我可以使用类似的代码和 Bearer Token 执行 GET,但似乎无法执行 POST。
当我 copy/paste 将 Json、URL 和 Bearer Token 放入 Postman 时,它工作得很好。但是从 C# 执行此操作时出现此错误:
"StatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Transfer-Encoding: chunked Connection: keep-alive Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" CF-RAY: 4c190ad8ad786539-SYD Date: Wed, 03 Apr 2019 06:38:54 GMT Set-Cookie: __cfduid=dc0232e99fa0fefc0bd728258229dd5d51554273534; expires=Thu, 02-Apr-20 06:38:54 GMT; path=/; domain=.paymentsapi.io; HttpOnly; Secure Server: 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();
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();