6

当我尝试将 .net 核心版本从 2.2 升级到 3.0 时,我是 GraphQL 的新手

使用 UseGraphiQl 时,我在 /graphql 页面上遇到了关于 UI 显示的问题

在此处输入图像描述

API 工作正常,但 UI 显示不正确。我搜索了解决方案,但没有什么真正有用的。

这是我对 graphql 的配置:

services.AddRazorPages().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);

app.UseGraphiQLServer(new GraphiQLOptions());
app.UseGraphiQl("/graphiql", "/graphql");
app.UseEndpoints(x =>
{
    x.MapControllers();
});

非常感谢任何帮助,谢谢。

4

2 回答 2

5

最后,我找到了解决方案:

services.AddRazorPages().AddNewtonsoftJson();

作为改进 ASP.NET Core 共享框架工作的一部分,Json.NET 已从 ASP.NET Core 共享框架中删除。

要在 ASP.NET Core 3.0 项目中使用 Json.NET:

  • 添加对 Microsoft.AspNetCore.Mvc.NewtonsoftJson 的包引用。

  • 更新 Startup.ConfigureServices 以调用 AddNewtonsoftJson。

参考:https ://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio#jsonnet-support

于 2019-11-26T02:10:44.787 回答
2

我不确定他们是否在 .net 核心版本 3.0 中进行了任何更改,但您可以在此处查看我的博客

我在用着GraphQL.Server.Ui.Playground

下面是您可以看到的最小配置

public void ConfigureServices(IServiceCollection services)
{
    services
        .AddMvc()
        .AddJsonOptions(
            options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
        )
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

    services.AddGraphQL(x =>
    {
        x.ExposeExceptions = true; //set true only in development mode. make it switchable.
    })
    .AddGraphTypes(ServiceLifetime.Scoped);
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, Seeder seeder)
{
    app.UseGraphQL<DataSchema>();
    app.UseGraphQLPlayground(new GraphQLPlaygroundOptions());

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller}/{action=Index}/{id?}");
    });
}

结果与 GraphiQl 相同

在此处输入图像描述

编辑:这是因为 Newtonsoft.Json 在 .Net Core 3 中发生了变化。您可以在此处查看我的答案

ASP.NET Core 3.0 [FromBody] 字符串内容返回“无法将 JSON 值转换为 System.String。”

于 2019-11-25T04:56:42.413 回答