📜  带参数的 gql 查询 - C# (1)

📅  最后修改于: 2023-12-03 14:54:02.041000             🧑  作者: Mango

带参数的 gql 查询 - C#

在C#中使用GraphQL(GQL)查询时,您可以使用参数来过滤查询结果并获取您需要的数据。本文将向您展示如何在C#中编写带参数的GQL查询。

安装

首先,您需要在您的项目中安装GraphQL解析器。您可以在NuGet中找到这个包,并使用以下命令将其安装到您的项目中:

Install-Package GraphQL -Version {version number}

其中{version number}是您要安装的版本号。

编写查询

现在,我们可以开始编写带参数的GQL查询。下面是一个简单的查询,它返回一个电影的标题和导演名称:

var query = @"
    query MyQuery($title: String, $director: String) {
        movies(title: $title, director: $director) {
            title
            director {
                name
            }
        }
    }
";

在这个查询中,我们定义了两个参数:titledirector。我们将这些参数传递给movies查询,并返回相应的电影标题和导演名称。

生成查询

接下来,我们需要为查询生成一个实例。我们可以使用GraphQL的GraphQLQuery类来做到这一点:

var gql = new GraphQLQuery(query);
执行查询

我们现在可以把查询发送给GraphQL API了,我们可以使用HttpClient在本例子中,我们使用的HttpClient是在.NET Core平台上最佳的Http处理途径:

var client = new HttpClient
{
    BaseAddress = new Uri("https://example.com/graphql")
};

var response = await client.PostAsync("", gql.ToJsonContent());

在这个示例中,我们向https://example.com/graphql发送了一个POST请求,并使用gql.ToJsonContent()方法把查询转换为JSON payload。

要获取查询结果,您需要解析响应的内容。您可以使用GraphQLResponse类的Deserialize方法来解析结果:

var result = await response.Content.ReadAsStringAsync();
var gqlResponse = GraphQLResponse.Deserialize(result);
传递参数

要使用我们的查询中定义的参数,我们需要在调用查询时传递它们。我们可以使用GraphQLQuery类的AddVariable方法来做到这一点:

var variables = new Dictionary<string, object>
{
    { "title", "The Matrix" },
    { "director", "Lana Wachowski" }
};

foreach (var variable in variables)
{
    gql.AddVariable(variable.Key, variable.Value);
}

var response = await client.PostAsync("", gql.ToJsonContent());

在这个示例中,我们定义了一个variables字典来存储我们要传递的参数。我们使用AddVariable方法向查询中添加这些参数。

总结

在本文中,我们向您展示了如何在C#中编写带参数的GQL查询。我们演示了如何使用GraphQL的GraphQLQuery类来生成查询,并使用HttpClient在.NET Core上发送请求。我们还向您展示了如何使用AddVariable方法传递查询参数。