Skip to content
ASP.NET Core MiddleWare to create a GraphQL end-point
C# PowerShell HTML Shell
Branch: develop
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.vscode add .vscode folder Dec 20, 2017
GraphQL.AspNetCore.Graphiql Bump Microsoft.Extensions.Logging.Debug from 3.0.1 to 3.1.0 Dec 4, 2019
GraphQl.AspNetCore Bump Microsoft.Extensions.Logging.Debug from 3.0.1 to 3.1.0 Dec 4, 2019
GraphQlDemo.Data.InMemory fix named schemas & small refactorings Mar 21, 2019
GraphQlDemo.Data REST implementation of Authors and Publishers logic Mar 17, 2019
GraphQlDemo.GraphQl fix named schemas & small refactorings Mar 21, 2019
GraphQlDemo.Models REST implementation of Authors and Publishers logic Mar 17, 2019
GraphQlDemo.Query merge pr in Mar 17, 2019
GraphQlDemo.Services Bump FluentValidation from 8.5.0 to 8.6.0 Dec 5, 2019
GraphQlDemo Bump Microsoft.VisualStudio.Web.CodeGeneration.Design Dec 4, 2019
test/GraphQl.AspNetCore.IntegrationTest Bump Microsoft.AspNetCore.Mvc.Testing from 3.0.0 to 3.1.0 Dec 4, 2019
tools fix develop build Dec 20, 2017
.gitignore fix develop build Dec 20, 2017
GraphQlDemo.sln fix named schemas & small refactorings Mar 21, 2019
LICENSE Initial commit Jun 21, 2017
README.md disable PR build & update readmy Mar 21, 2019
appveyor.yml disable PR build & update readmy Mar 21, 2019
azure-pipelines.yml Set up CI with Azure Pipelines Oct 3, 2018
build.cake disable PR build & update readmy Mar 21, 2019
build.ps1 fix develop build Dec 20, 2017
build.sh Remove specific sdk requirement Oct 3, 2018
contribution.md finsh contribution description Oct 30, 2017
global.json upgrade to ASP.NET Core 2.2.0 Feb 22, 2019

README.md

GraphQl.AspNetCore

The feedback about my last blog post about the GraphQL end-point in ASP.NET Core was amazing. That post was mentioned on reddit, many times shared on twitter, lInked on http://asp.net and - I'm pretty glad about that - it was mentioned in the ASP.NET Community Standup.

Because of that and because GraphQL is really awesome, I decided to make the GraphQL MiddleWare available as a NuGet package. I did some small improvements to make this MiddleWare more configurable and more easy to use in the Startup.cs

Branches & contributing & testing

The master branch is the stable branch and I don't axcept PRs to that branch. To contribute, please create PRs based on the develop branch. To play around with the latest changes, please also use the develop branch.

Changes on the develop branch ("next version" branch) will be pushed as preview releases to MyGet. To see whether this branch is stable, follow the builds on AppVeyor: Build status

Changes on the master branch ("current version" branch) will be pushed as releases to NuGet. To see whether this branch is stable, follow the builds on AppVeyor: Build status

Usage and short documentation

NuGet

Preview builds on MyGet and release builds on NuGet.

Install that package via Package Manager Console:

PM> Install-Package GraphQl.AspNetCore

Install via dotnet CLI:

dotnet add package GraphQl.AspNetCore

Using the library

You still need to configure your GraphQL schema using the graphql-dotnet library, as described in my last post.

First configure your schema(s) in the ConfigureServices method in Startup.cs. Make sure all referenced graph types are registered as well so they can be resolved from the container.

// Configure the default schema
services.AddGraphQl(schema =>
{
    schema.SetQueryType<BooksQuery>();
    schema.SetMutationType<BooksMutation>();
});

// Also register all graph types
services.AddSingleton<BooksQuery>();
services.AddSingleton<BooksMutation>();
services.AddSingleton<BookType>();
services.AddSingleton<AuthorType>();
services.AddSingleton<PublisherType>();

In the Configure method, you add the GraphQL middleware like this:

You can use different ways to register the GraphQlMiddleware:

// the simplest form to use GraphQl. defaults to '/graphql' with default options
app.UseGraphQl();

// or specify options only (default path)
app.UseGraphQl(new GraphQlMiddlewareOptions
{
    FormatOutput = true, // default
    ComplexityConfiguration = new ComplexityConfiguration()); //default
});

app.UseGraphQl(options =>
{
    options.EnableMetrics = true;
});

// or specify path and options

app.UseGraphQl("/graphql", new GraphQlMiddlewareOptions
{
    FormatOutput = true, // default
    ComplexityConfiguration = new ComplexityConfiguration()); //default
});

// or like this:

app.UseGraphQl("/graph-api", options =>
{
    options.SchemaName = "OtherSchema"; // only if additional schemas were registered in ConfigureServices
    //options.AuthorizationPolicy = "Authenticated"; // optional
});

Personally I prefer the second way, which is more readable in my opinion.

Options

The GraphQlMiddlewareOptions are pretty simple.

  • SchemaName: This specifies the registered schema name to use. Leave null for the default schema.
  • AuthorizationPolicy: This configures the authorization policy name to apply to the GraphQL endpoint.
  • FormatOutput: This property defines whether the output is prettified and indented for debugging purposes. The default is set to true.
  • ComplexityConfiguration: This property is used to customize the complexity configuration.
  • ExposeExceptions: This property controls whether exception details such as stack traces should be returned to clients. This defaults to false and should only be set to true in the Development environment.
  • EnableMetrics: Enable metrics defaults to false. See GraphQL .net client documentation how to create a stats report.

This should be enough for the first time. If needed it is possible to expose the Newtonsoft.JSON settings, which are used in GraphQL library later on.

GraphQL.AspNetCore.Graphiql

This library provides a middleware to add a GraphiQL UI to your GraphQL endpoint. To learn more about it and the way I created it, read the blog post about it: GraphiQL for ASP.NET Core

NuGet

Preview builds on MyGet and release builds on NuGet.

Install that package via Package Manager Console:

PM> Install-Package GraphQl.AspNetCore.Graphiql

Install via dotnet CLI:

dotnet add package GraphQl.AspNetCore.Graphiql

Using the library

Open your Startup.cs and configure the middleware in the Configure method.

You can use two different ways to register the GraphiqlMiddleware:

app.UseGraphiql("/graphiql", new GraphQlMiddlewareOptions
{
    GraphQlEndpoint = "/graphql"
});


app.UseGraphiql("/graphiql", options =>
{
    options.GraphQlEndpoint = "/graphql";
});

Personally I prefer the second way, which is more readable in my opinion.

The GraphQlEndpoint needs to match the paht a GraphQL endpoint.

Options

Currently the options just have two properties:

  • GraphQlEndpoint: This is the path of your GraphQL end-point, configured with the GraphQlMiddleware. In theory it could be any possible path or URL that provides an GraphQL endpoint. Until now, I just tested it with the GraphQlMiddleware.

One more thing

I would be happy, if you try this library and get me some feedback about it. A demo application to quickly start playing around with it, is available here on GitHub. Feel free to raise some issues and to create some PRs to improve this MiddleWare.

You can’t perform that action at this time.