当前位置:首页 > 行业动态 > 正文

如何在ASP.NET Core中实现GraphQL的Hello World示例?

ASP.NET Core使用GraphQL第一章之Hello World,介绍了如何在ASP.NET Core项目中集成GraphQL,并实现一个简单的Hello World查询。

在当今的软件开发领域,GraphQL作为一种强大的查询语言和运行时系统,正逐渐受到开发者们的青睐,它允许客户端按需请求数据,从而减少了过度获取或不足获取数据的风险,结合ASP.NET Core这一高效、跨平台的框架,我们可以构建出既灵活又高性能的Web API,本文将引导您通过一个简单的“Hello World”示例,来了解如何在ASP.NET Core中使用GraphQL。

一、准备工作

1. 安装.NET SDK

确保您的开发环境中已经安装了.NET SDK,您可以从[微软官网](https://dotnet.microsoft.com/download)下载并安装最新版本的.NET SDK。

2. 创建ASP.NET Core项目

打开命令提示符或终端,运行以下命令来创建一个新的ASP.NET Core Web API项目:

dotnet new webapi -n GraphQLDemo

3. 导航到项目目录

cd GraphQLDemo

二、安装GraphQL相关包

我们需要安装一些NuGet包来支持GraphQL的开发,在项目目录下,运行以下命令:

dotnet add package HotChocolate.AspNetCore --version x.x.x
dotnet add package HotChocolate.Data --version x.x.x
dotnet add package Microsoft.EntityFrameworkCore --version x.x.x
dotnet add package Microsoft.EntityFrameworkCore.InMemory --version x.x.x

请将x.x.x替换为您希望安装的具体版本号。

三、配置GraphQL服务

在Startup.cs文件中,配置GraphQL服务,修改ConfigureServices方法,添加GraphQL的相关服务:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddEndpointsApiExplorer();
    services.AddSwaggerGen();
    
    // Add GraphQL services
    services.AddGraphQLServer()
        .ModifyRequestOptions(opt => opt.IncludeExceptionDetails = true);
    
    services.AddSingleton<ISchemaFilter, DefaultSchemaFilter>();
    services.AddSingleton<IDocumentExecuter, DocumentExecuter>();
    services.AddSingleton<IDocumentWriter, DefaultDocumentWriter>();
    services.AddSingleton<IErrorFormatter, PrettyErrorFormatter>();
}

在Configure方法中,添加GraphQL中间件:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseSwagger();
        app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "GraphQLDemo API"));
    }
    app.UseRouting();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
        endpoints.MapGraphQL(); // Map the GraphQL endpoint
    });
}

四、创建GraphQL模式

在项目中创建一个名为Models的文件夹,并在其中创建一个Query.cs文件,用于定义我们的GraphQL模式:

using HotChocolate;
using HotChocolate.Types;
using System.Threading.Tasks;
namespace GraphQLDemo.Models
{
    public class Query
    {
        [UseProjection]
        [UseFiltering]
        [UseSorting]
        public Task<string> GetHelloWorld() => Task.FromResult("Hello, World!");
    }
}

五、运行应用程序

一切准备就绪,您可以运行应用程序了,在终端中执行以下命令:

dotnet run

应用程序启动后,打开浏览器并访问http://localhost:5000/graphql,您将看到一个GraphQL的交互式界面,在左侧的查询编辑器中输入以下查询:

{
  getHelloWorld
}

点击“Execute”按钮,您应该会在右侧的结果区域看到“Hello, World!”的响应。

六、FAQs

Q1: 如何更改GraphQL的端口号?

A1: 要更改GraphQL的端口号,您需要在Program.cs文件中修改CreateHostBuilder方法中的端口配置,如果您想将端口更改为5001,可以这样修改:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseUrls("http://localhost:5001");
            webBuilder.UseStartup<Startup>();
        });

Q2: 如果我想添加更多的GraphQL查询或突变,我该怎么做?

A2: 您可以通过在Models文件夹中创建更多的.cs文件来实现,每个文件都可以包含一个或多个GraphQL操作(查询、突变等),您可以创建一个名为Mutation.cs的文件,并定义如下的突变:

using HotChocolate;
using HotChocolate.Types;
using System.Threading.Tasks;
namespace GraphQLDemo.Models
{
    public class Mutation
    {
        public async Task<string> EchoMessage(string message)
        {
            return await Task.FromResult($"Echo: {message}");
        }
    }
}

在Query.cs文件中,您可以添加一个字段来调用这个突变:

[ExtendObjectType("Query")]
public class QueryExtensions
{
    public Mutation Mutation => new Mutation();
}

各位小伙伴们,我刚刚为大家分享了有关“ASP.NET Core使用GraphQL第一章之Hello World”的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!

0