DotNet Core 的 GraphQL 将参数值转换为整数
DotNet Core's GraphQL casting parameter value to integer
我正在使用 graphql-dotnet (dotnet GraphQl) 在 DotNet Core 2.1 中实现 GraphQL。我有以下 类:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
public class CustomerInputType : InputObjectGraphType
{
public CustomerInputType()
{
Name = "CustomerInput";
Field<NonNullGraphType<IntGraphType>>(nameof(Customer.Id));
Field<NonNullGraphType<StringGraphType>>(nameof(Customer.Name));
}
}
public class CustomerOutputType : ObjectGraphType<Customer>
{
public CustomerOutputType()
{
Name = "Customer";
Field<NonNullGraphType<IntGraphType>>(nameof(Customer.Id));
Field<NonNullGraphType<StringGraphType>>(nameof(Customer.Name));
}
}
public class CustomerMutation : ICustomerMutation
{
public void Resolve(GraphQLMutation graphQLMutation)
{
graphQLMutation.FieldAsync<CustomerOutputType, Customer>
(
"createCustomer",
arguments: new QueryArguments
(
new QueryArgument<NonNullGraphType<CustomerInputType>> { Name = "customer"}
),
resolve: context =>
{
var customer = context.GetArgument<Customer>("customer");
return Task.FromResult(customer);
}
);
}
}
这是我通过 GraphIQL 发送给这个突变的输入:
mutation createCustomer
{
createCustomer(customer:{id: 19, name: "Me"})
{id name}
}
这是 C# 代码中的输入:
手表显示 id 的值为 0x00000013
而不是 19
。
这是 GraphIQL 中的输出:
我需要使用 19
的值在注入此突变的存储库中进行进一步处理。但是,当我将 Customer 对象传递到存储库时,Customer 对象中的 id 值为 0x00000013
,这会导致进一步的下游处理失败,因为它期望 19
而不是 0x00000013
。
为什么 C# 代码中的对象 0x00000013
的值仍被转换为 GraphIQL 中的实际值?如何在突变 returns 结果之前将 Cusutomer.id 的值转换为正确的整数值以便进一步处理?
正确,该值只是显示为十六进制。是你的检查员让你感到困惑。 13 十六进制作为二进制是
10011
那是十进制
19
https://www.rapidtables.com/convert/number/hex-to-decimal.html
我正在使用 graphql-dotnet (dotnet GraphQl) 在 DotNet Core 2.1 中实现 GraphQL。我有以下 类:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
public class CustomerInputType : InputObjectGraphType
{
public CustomerInputType()
{
Name = "CustomerInput";
Field<NonNullGraphType<IntGraphType>>(nameof(Customer.Id));
Field<NonNullGraphType<StringGraphType>>(nameof(Customer.Name));
}
}
public class CustomerOutputType : ObjectGraphType<Customer>
{
public CustomerOutputType()
{
Name = "Customer";
Field<NonNullGraphType<IntGraphType>>(nameof(Customer.Id));
Field<NonNullGraphType<StringGraphType>>(nameof(Customer.Name));
}
}
public class CustomerMutation : ICustomerMutation
{
public void Resolve(GraphQLMutation graphQLMutation)
{
graphQLMutation.FieldAsync<CustomerOutputType, Customer>
(
"createCustomer",
arguments: new QueryArguments
(
new QueryArgument<NonNullGraphType<CustomerInputType>> { Name = "customer"}
),
resolve: context =>
{
var customer = context.GetArgument<Customer>("customer");
return Task.FromResult(customer);
}
);
}
}
这是我通过 GraphIQL 发送给这个突变的输入:
mutation createCustomer
{
createCustomer(customer:{id: 19, name: "Me"})
{id name}
}
这是 C# 代码中的输入:
手表显示 id 的值为 0x00000013
而不是 19
。
这是 GraphIQL 中的输出:
我需要使用 19
的值在注入此突变的存储库中进行进一步处理。但是,当我将 Customer 对象传递到存储库时,Customer 对象中的 id 值为 0x00000013
,这会导致进一步的下游处理失败,因为它期望 19
而不是 0x00000013
。
为什么 C# 代码中的对象 0x00000013
的值仍被转换为 GraphIQL 中的实际值?如何在突变 returns 结果之前将 Cusutomer.id 的值转换为正确的整数值以便进一步处理?
正确,该值只是显示为十六进制。是你的检查员让你感到困惑。 13 十六进制作为二进制是
10011
那是十进制
19
https://www.rapidtables.com/convert/number/hex-to-decimal.html