Using GraphQL .NET Client in .NET 5
Tags: dotnet, csharp, graphql
Published: 2020-12-03 09:28:42

---
title: Using GraphQL .NET Client in .NET 5
published: true
description: 
tags: dotnet,csharp,graphql
---
[GraphQL for .NET](https://github.com/graphql-dotnet/graphql-dotnet) is one of the open-source libraries available both to create and consume a GraphQL API and there are dozens of blog posts and tutorials available to learn more about it.

In this quick post, I want to show you how to use [GraphQL.Client](https://github.com/graphql-dotnet/graphql-client) and define the client in your Startup.cs and inject it into a controller in ASP.NET Web API.

Once you've created your Web API (or any other type of .NET project); you need to add its NuGet package:
```
dotnet add package GraphQL.Client --version 3.2.0
``` 

If you want to use Newtonsoft.JSON, feel free to add that too
```
dotnet add package Newtonsoft.Json --version 12.0.3
```

The next step is adding a GraphQLClient to your Startup services to be able to inject them into your controller later:
```csharp
public void ConfigureServices(IServiceCollection services) {
            services.AddMicrosoftIdentityWebApiAuthentication(Configuration);

            var graphQlClient = new GraphQLHttpClient(Configuration.GetSection("MyGraphQLApi").GetSection("ApiUrl").Value, new NewtonsoftJsonSerializer());
            graphQlClient.HttpClient.DefaultRequestHeaders.Add("Authorization", Configuration.GetSection("MyGraphQLApi").GetSection("ApiToken").Value);
            services.AddScoped<IGraphQLClient>(x => graphQlClient);

            services.AddControllers();
}
```

It's simply getting API URL and Token from "MyGraphQLApi" section in your appsettings.json file (so you don't need to repeatedly do this in your methods) and adds it to your services.

Then you can easily inject it into your controller:
```csharp
private IGraphQLClient _mondayClient;
public MondayController(IGraphQLClient mondayClient) {
     _mondayClient = mondayClient;
}
```
Now you can use this injected instance of GraphQLClient in your methods:
```csharp
var request = new GraphQLRequest {
                Query = @"query Project($boardId: [Int], $groupId: [String], $columnsIds: [String])
                {
                    boards (ids: $boardId) {
                        name,
                        groups (ids: $groupId) {
                            id
                            title
                            items {
                                name
                                column_values (ids: $columnsIds) {
                                    id
                                    title
                                    value
                                }
                            }
                        }
                    }
                }",
                Variables = new { boardId = new List<int> { 379551383 }, groupId = new List<string> { "new_group80740" }, columnsIds = new List<string>() { "text73", "text7" } }
            };

var response = await _mondayClient.SendQueryAsync<Data>(request);
```
In the example above I'm getting some data from Monday.com API and I've passed parameters using Variables.

If you have a complicated data model returned in JSON, you can use tools like [JSONUtils](https://www.jsonutils.com/) or [JSON2CSharp](https://json2csharp.com/) to generate your model classes from the JSON and use it to deserialize the response to objects.

Enjoy!