You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C# WinForms中使用Strawberry Shake GraphQL?

在C# WinForms中使用Strawberry Shake对接HotChocolate GraphQL服务器

以下是针对C#新手的分步操作指南:

1. 安装NuGet包

打开WinForms项目的NuGet包管理器,安装以下包:

  • StrawberryShake.Runtime:核心运行库
  • StrawberryShake.Tools:用于生成GraphQL客户端代码的工具
  • Microsoft.Extensions.DependencyInjection:用于依赖注入管理客户端实例

2. 添加GraphQL配置文件

在项目根目录新建名为.graphqlrc.json的文件,内容如下(替换成你的HotChocolate服务器地址):

{
  "schema": "http://localhost:5000/graphql",
  "documents": "**/*.graphql",
  "extensions": {
    "strawberryShake": {
      "name": "MyGraphQLClient",
      "namespace": "MyWinFormsApp.GraphQL",
      "output": "Generated/GraphQLClient.cs"
    }
  }
}

说明:

  • schema:你的HotChocolate GraphQL服务器地址
  • name:生成的客户端类名称
  • namespace:客户端代码的命名空间
  • output:生成代码的存放路径

3. 编写GraphQL查询

在项目中新建Queries.graphql文件,写入你的查询语句,比如:

query GetProducts {
  products {
    id
    name
    price
  }
}

4. 生成客户端代码

打开Visual Studio的“包管理器控制台”,执行以下命令:

dotnet graphql init

执行完成后,会在你指定的output路径下生成客户端代码。

5. 配置依赖注入

在WinForms项目的Program.cs中,配置服务容器并注册GraphQL客户端:

using Microsoft.Extensions.DependencyInjection;
using MyWinFormsApp.GraphQL;

namespace MyWinFormsApp
{
    internal static class Program
    {
        [STAThread]
        static void Main()
        {
            // 配置服务
            var services = new ServiceCollection();
            services.AddMyGraphQLClient()
                    .ConfigureHttpClient(client => client.BaseAddress = new Uri("http://localhost:5000/graphql"));
            
            var serviceProvider = services.BuildServiceProvider();

            // 启动窗体
            ApplicationConfiguration.Initialize();
            Application.Run(new MainForm(serviceProvider.GetRequiredService<IMyGraphQLClient>()));
        }
    }
}

6. 在窗体中使用客户端

修改MainForm的构造函数,注入客户端实例,然后在控件事件中调用查询:

using MyWinFormsApp.GraphQL;

namespace MyWinFormsApp
{
    public partial class MainForm : Form
    {
        private readonly IMyGraphQLClient _graphQLClient;

        public MainForm(IMyGraphQLClient graphQLClient)
        {
            InitializeComponent();
            _graphQLClient = graphQLClient;
        }

        private async void btnLoadProducts_Click(object sender, EventArgs e)
        {
            try
            {
                // 调用查询
                var result = await _graphQLClient.GetProducts.ExecuteAsync();
                
                // 处理结果
                if (result.Data?.Products != null)
                {
                    dataGridView1.DataSource = result.Data.Products.ToList();
                }
                else if (result.Errors != null)
                {
                    MessageBox.Show($"查询出错:{string.Join("\n", result.Errors.Select(x => x.Message))}");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"请求失败:{ex.Message}");
            }
        }
    }
}

注意事项

  • 确保HotChocolate服务器处于运行状态,并且地址与配置文件中的一致
  • 如果生成代码时遇到问题,检查.graphqlrc.json的路径和配置是否正确
  • 异步操作要使用async/await,避免阻塞UI线程

内容的提问来源于stack exchange,提问作者Ibrahim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:58:23