C# GraphQL查询语法错误

C# GraphQL查询语法错误,c#,.net,graphql,graphql-dotnet,C#,.net,Graphql,Graphql Dotnet,我使用下面的代码在我的系统中实现一个通用查询 if (!string.IsNullOrEmpty(query)) { var urlDecode = HttpUtility.UrlDecode(query); var result = await (_searchRepository.ExecuteQuery(urlDecode.Replace("\t", "").R

我使用下面的代码在我的系统中实现一个通用查询

        if (!string.IsNullOrEmpty(query))
        {
            var urlDecode = HttpUtility.UrlDecode(query);

                var result =
                    await (_searchRepository.ExecuteQuery(urlDecode.Replace("\t", "").Replace(@"\", string.Empty))).ConfigureAwait(false);
                response = Request.CreateResponse(HttpStatusCode.OK,
                    new GeneralOutput() {HasError = false, Data = result});

        }
        else
        {
            response = Request.CreateResponse(HttpStatusCode.OK,
                    new GeneralOutput() { HasError = true, Data = null , ErrorType = ErrorType.ValidationError , Message = "Empty Query String"});
        }
Execute查询看起来像什么

public async Task<string> ExecuteQuery(string querystring)
{
    try
    {
        var result = await new DocumentExecuter().ExecuteAsync(_ =>
        {
            _.Schema = new Schema { Query = new ViewerType() };
            _.Query = querystring;
        }).ConfigureAwait(false);

        var json = new DocumentWriter(Formatting.None, null).Write(result);
        return json;
    }
    catch (Exception e)
    {
        var logInstance = LogManager.GetCurrentClassLogger();
        logInstance?.Error(e,
            $" {MethodBase.GetCurrentMethod().Name} => {e.Message}{Environment.NewLine}{e.StackTrace}");
        return null;
    }
}
我总是犯错误

"{\"errors\":[{\"message\":\"Syntax Error GraphQL (1:19) Expected $, found Name \\\"userTwelveDigits\\\"\\n1: query MediaSearch(userTwelveDigits:\\\"12345678\\\",fromcreationDate:null,tocreationDate:null,mediaId:null,versionTypeId:null,keyword:null)  { MediaTitle MediaIdentifier   }\\n                     ^\\n\"}]}"

这是一个常见的错误,它使用GraphQL的“操作名”作为查询字段,更像是一个修饰函数名。下面是一个查询,用于获取您请求的数据:

query MyQueryName {
  MediaSearch {
    MediaTitle
    MediaIdentifier
  }
}
这里是你如何传递参数的-它们在字段中进行:

query MyQueryName {
  MediaSearch(mediaId: "asdf") {
    MediaTitle
    MediaIdentifier
  }
}
如果您想了解更多关于GraphQL的信息,我建议您快速浏览网站上关于查询和模式的“学习”部分:

请注意,上面的
MyQueryName
可以是任何内容,并且根本不会影响查询结果。它只是用于服务器端日志记录,因此您可以轻松识别此查询


编辑-我写了一篇关于查询的所有不同部分的博文,灵感来自这个问题

非常感谢,但我尝试了查询MyQueryName{mediaSearch{mediaTitle mediaIdentifier}}获取此错误消息“{”data\”:null,\“errors\”:[{“message\”:\“error trusting to resolve mediaSearch.\”,“locations\”:[{“Line\”:1,\“Column\”:20}]}]“任何建议,请查看您的代码中是否存在运行时错误,但是查询是有效的。我将查看
ExecuteQuery
方法的
结果中的内部错误。
query MyQueryName {
  MediaSearch {
    MediaTitle
    MediaIdentifier
  }
}
query MyQueryName {
  MediaSearch(mediaId: "asdf") {
    MediaTitle
    MediaIdentifier
  }
}