将 StringContent Json 转换为 byte[]
transform StringContent Json into byte[]
// 需要使用此人在 byte[] 中转换为 Json 来完成 api,我尝试了一些我在这里找到的不同方法,但我无法使其工作heelp
static async void MakeRequest()
{
var client = new HttpClient();
var queryString = HttpUtility.ParseQueryString(string.Empty);
var person = new Person();
person.id = "1234";
person.Name = "John Doe";
person.Email = " ";
person.individualIdentificationCode = "0000";
person.order = "1";
person.action = "DIGITAL-SIGNATURE";
person.signurl = "https://sandbox.portaldeassinaturas.com.br/Assinatura/AssinarEletronicoFrame/152124?chave=";
var json = JsonConvert.SerializeObject(person);
var data = new StringContent(json, Encoding.UTF8, "application/json");
// Request headers
client.DefaultRequestHeaders.Add("Token", "{}");
var uri = "https://api-sbx.portaldeassinaturas.com.br/api/v2/document/create?" + queryString;
HttpResponseMessage response;
// Request body
byte[] byteData = Encoding.UTF8.GetBytes(data);
using (var content = new ByteArrayContent(byteData))
{
content.Headers.ContentType = new
MediaTypeHeaderValue("application/Json");
response = await client.PostAsync(uri, content);
}
}
}
}
您看到的错误是因为 GetBytes
需要一个 char[]
or string
. But you are trying to pass a StringContent
类型的对象并且编译器没有可用的转换。 但是:你甚至不需要那个!
因为 StringContent
"is-a" ByteArrayContent
( .. "is-a" HttpContent
, 这是 PostAsync
所期望的), 只需将它传递给PostAsync
:
response = await client.PostAsync(uri, data);
AND 当然,一如既往:不要在每次调用时都创建一个新的 HttpClient!
HttpClient is intended to be instantiated once and re-used throughout the life of an application. Instantiating an HttpClient class for every request will exhaust the number of sockets available under heavy loads. This will result in SocketException errors. -
Source
// 需要使用此人在 byte[] 中转换为 Json 来完成 api,我尝试了一些我在这里找到的不同方法,但我无法使其工作heelp
static async void MakeRequest()
{
var client = new HttpClient();
var queryString = HttpUtility.ParseQueryString(string.Empty);
var person = new Person();
person.id = "1234";
person.Name = "John Doe";
person.Email = " ";
person.individualIdentificationCode = "0000";
person.order = "1";
person.action = "DIGITAL-SIGNATURE";
person.signurl = "https://sandbox.portaldeassinaturas.com.br/Assinatura/AssinarEletronicoFrame/152124?chave=";
var json = JsonConvert.SerializeObject(person);
var data = new StringContent(json, Encoding.UTF8, "application/json");
// Request headers
client.DefaultRequestHeaders.Add("Token", "{}");
var uri = "https://api-sbx.portaldeassinaturas.com.br/api/v2/document/create?" + queryString;
HttpResponseMessage response;
// Request body
byte[] byteData = Encoding.UTF8.GetBytes(data);
using (var content = new ByteArrayContent(byteData))
{
content.Headers.ContentType = new
MediaTypeHeaderValue("application/Json");
response = await client.PostAsync(uri, content);
}
}
}
}
您看到的错误是因为 GetBytes
需要一个 char[]
or string
. But you are trying to pass a StringContent
类型的对象并且编译器没有可用的转换。 但是:你甚至不需要那个!
因为 StringContent
"is-a" ByteArrayContent
( .. "is-a" HttpContent
, 这是 PostAsync
所期望的), 只需将它传递给PostAsync
:
response = await client.PostAsync(uri, data);
AND 当然,一如既往:不要在每次调用时都创建一个新的 HttpClient!
HttpClient is intended to be instantiated once and re-used throughout the life of an application. Instantiating an HttpClient class for every request will exhaust the number of sockets available under heavy loads. This will result in SocketException errors. - Source