我正在尝试将一个 int 值作为秒标量传递给我的 graphql 后端。前端使用 vue-apollo,后端使用 graphql-dotnet 在 dotnet core 中编写。
当我通过操场调用突变时,一切正常。我的 vue 应用程序既不会引发任何错误/异常,也不会使突变起作用。在后端调用突变,但值为s
null(因此 00:00:00 因为它是 TimeSpan)。后端是用 dotnet core 3.1 编写的,但正如我所说,从给定数字到 TimeSpanSecondsGraphType 的转换是通过 Playground 进行的。
前端代码
我的突变看起来像
updateS(
sId: ID = null
s: s = null
): SType
我的输入类型 s 看起来像
type s {
s: Seconds = null
}
我的 SType 看起来像
type SType {
s: Seconds
}
工作示例调用(通过操场)
mutation {
updateS(s: "08d924e8-69fb-425c-8130-de7342a2ca2a", s: {
s: 3600
}) {
s
}
}
当我在我的 vue 应用程序中调用突变时,这是来自 chrome 的有效负载(不工作):
{"operationName":"updateS","variables":{"sId":"08d924e8-69fb-425c-8130-de7342a2ca2a","s":{"s":3600}},"query":"mutation updateS($sId: ID!, $s: s!) {\n updateS(sId: $sId, s: $s) {\n s\n__typename\n }\n}\n"}
编辑 - 添加后端代码
dotnet 核心突变和模型
这是我在后端的突变:
Field<SType>(
"updateS",
arguments: new QueryArguments(
new QueryArgument<IdGraphType> { Name = "sId" },
new QueryArgument<SInputType> { Name = "s" }
),
resolve: context =>
{
var sId = context.GetArgument<Guid>("sId");
var s = context.GetArgument<S>("s"); // s.S is always {00:00:00} when called from vue app.
return repo.UpdateS(sId, s);
});
我的SInputType
:
public class SInputType : InputObjectGraphType
{
public SInputType()
{
Name = "s";
Field<TimeSpanSecondsGraphType>("s");
}
}
我的S.cs
:
public class S
{
public Guid Id { get; set; }
public TimeSpan S { get; set; }
}
有什么建议吗?