如何使用承载令牌发布JSon

问题描述 投票:0回答:1

我可以使用类似的代码和Bearer Token进行GET,但似乎无法进行POST。

当我将Json,URL和Bearer Token复制/粘贴到Postman时,它可以完美地工作。但是当从C#中执行此操作时,我收到此错误:

“StatusCode:400,ReasonPhrase:'Bad Request',版本:1.1,内容:System.Net.Http.StreamContent,标题:{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日期:星期三,03四月2019 06:38:54 GMT Set-Cookie: __cfduid = dc0232e99fa0fefc0bd728258229dd5d51554273534; expires = Thu,02-Apr-20 06:38:54 GMT; path = /; domain = .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();
c# json api post bearer-token
1个回答
2
投票

PostAsJsonAsync将你的ByteArrayContent转换为json对象。你可以直接用你的PostAsJsonAsync使用ether 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并使用PostAsyncStringContent对象。像这样:

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();
© www.soinside.com 2019 - 2024. All rights reserved.