我正在尝试调用GraphQL API来获取订单,但是布尔参数获取错误。我在做错什么吗?
我正在尝试向GraphQL API发送查询,但是在布尔参数中出了点问题,并且GraphQL返回错误:“ Variable \” $ imported \“的值无效\” 0 \“;期望的类型为Boolean ;无法将值表示为布尔值:0”。 我用过GraphIQL Feen!为了测试它,当我调用传递单词“ false”或“ true”(不带双引号)时,API返回正确,但是如果我尝试数字1或0(带或不带双引号),则会发生错误。 在代码中,我修改了序列化的json字符串,没错,“ imported”参数将false(无双引号的单词)作为值,这是必须的。因此我意识到在序列化对象之后,在RestSharp将其发送到API之前,该值更改为“ 0”。
C#调用API代码块:
public string Execute(string query, object variables = null, Dictionary<string, string> additionalHeaders = null, int timeout = 0)
{
RestClient _client = CreateClient("=== API LINK ===");
var request = new RestRequest("/", Method.POST);
request.Timeout = timeout;
if (additionalHeaders != null && additionalHeaders.Count > 0)
{
foreach (var additionalHeader in additionalHeaders)
{
request.AddHeader(additionalHeader.Key, additionalHeader.Value);
}
}
if (!string.IsNullOrEmpty(CallToken))
{
request.AddHeader("Authorization", "Bearer " + CallToken);
}
request.RequestFormat = DataFormat.Json;
request.JsonSerializer = NewtonsoftJsonSerializer.Default;
request.AddJsonBody(new
{
query = query,
variables = variables
});
return _client.Execute(request).Content;
}
序列化的对象,在发送之前:
{"query":"query
(
$current_page: Int
$per_page: Int
$imported: Boolean
$industry_code: String
$order_code: Int
)
{
orders
(
current_page: $current_page
per_page: $per_page
imported: $imported
industry_code: $industry_code
order_code: $order_code
)
{
data {
id
order_code
industry_code
wholesaler_code
wholesaler_branch_code
customer_code
customer_alternative_code
customer_email
distribution_center_code
order_payment_term
commercial_condition_code
customer_order_code
profit_share_margin
is_free_good_discount
recalculates_discount
customer_code_type
indicator
salesman_code
sends_either_value_or_discount
sends_only_discount
additional_information
products {
ean
amount
discount_percentage
net_value
monitored
payment_term
}
status
responses {
id
content
imported_at
importation_status
importation_outcome
outcome
industry_code
order_code
wholesaler_order_code
wholesaler_branch_code
wholesaler_code
file_name
processed_at
invoice_at
delivery_forecast_at
consideration_code
payment_term
is_free_good_discount
products {
ean
invoice_ean
response_amount
unit_discount_percentage
unit_discount_value
unit_net_value
monitored
industry_consideration
wholesaler_consideration
}
}
invoices {
id
content
imported_at
importation_status
importation_outcome
outcome
industry_code
order_code
wholesaler_order_code
customer_code
wholesaler_branch_code
wholesaler_code
file_name
processed_at
released_on
reimbursement_values {
ean
value
}
products {
ean
invoice_amount
unit_discount_percentage
unit_discount_value
unit_net_value
icms_tax_calc_base
tax_substitution_icms_tax_calc_base
icms_percentage
ipi_percentage
icms_tax_value
tax_substitution_value
passed_along_icms_tax_value
payment_term
passed_along_value
total_value
total_value_with_taxes
financial_discount_percentage
financial_discount_value
cfop_code
tax_substitution_flag
positive_list_flag
classification
dcb_code
tax_substitution_code
type
}
taxes {
icms_tax_rate
icms_tax_calc_base
icms_tax_value
}
batches {
ean
batch
amount
expires_on
}
bank_tickets {
code
expires_on
value
issued_on
installment_value
anticipation_discount
interest_daily_rate
financial_discount
penalty
bank_code
bank_agency_code
bank_account
financial_discount_total_value
}
code
model
series
danfe_key
tax_substitution_icms_tax_calc_base
icms_tax_calc_base
value
discount
passed_along_icms_tax_value
products_total_value
ipi_tax_value
freight_value
insurance_value
volume_amount
icms_tax_total_value
icms_tax_retained_total_value
status
}
cancellations {
id
content
imported_at
importation_status
importation_outcome
outcome
industry_code
order_code
wholesaler_code
wholesaler_branch_code
entirely_cancelled
file_name
products {
ean
}
}
}
}
}
","variables":{"current_page":0,"per_page":1000,"imported":false,"industry_code":"","order_code":0}}
我希望将json中的布尔值作为没有双引号的单词发送,但是RestSharp的sendind为0并带有双引号。
PS:很抱歉写错了,我的英语说得不好。
修改
我解决了这个问题,显然是当您委托给RestSharp自己序列化一个Object时,他以自己的方式序列化了Object,他将布尔值更改为双引号内的布尔值,并且我读到其他类型也有问题。因此,基本上,您要做的就是在调用AddJsonBody方法之前对其进行序列化,然后传递已经序列化的参数,
赞:
request.AddJsonBody(new
{
query = query,
variables = JsonConvert.SerializeObject(variables)
});