alaa_sayegh
alaa_sayegh

Reputation: 2211

Consume and Configure Graphql request from .Net C# console application client

I'm trying to consume a Graphql Api from a C# client. For that I'm using the GraphQl.Net Nuget package. The problem is that, I have no idea how to set the Api Url as I don't have HttpRequest object and this results also with additional problems that I can't set the authentcation header and send the token with the request. My code looks like:

public void Post(TestGraphQl.GraphQLQuery query)
{
   var inputs = query.Variables.ToInputs();
   var queryToExecute = query.Query;

   var result = _executer.ExecuteAsync(_ =>
   {
     _.Schema = _schema;
     _.Query = queryToExecute;
     _.OperationName = query.OperationName;
     _.Inputs = inputs;

     //_.ComplexityConfiguration = new ComplexityConfiguration { MaxDepth = 15 };
     _.FieldMiddleware.Use<InstrumentFieldsMiddleware>();

    }).Result;

    var httpResult = result.Errors?.Count > 0
                ? HttpStatusCode.BadRequest
                : HttpStatusCode.OK;

    var json = _writer.Write(result);
}

And the caller looks like this:

var jObject = new Newtonsoft.Json.Linq.JObject();
jObject.Add("id", deviceId);
client.Post(new GraphQLQuery { Query = "query($id: String) { device (id: $id) { displayName, id } }", Variables = jObject });

I'm totally new to this topic and appreciate any help. Many thanks!!

Upvotes: 4

Views: 21756

Answers (2)

Leonhard Balster
Leonhard Balster

Reputation: 41

This worked out for me. You will need the GraphQL.Client Package. My_class is the class for the deserialization.

var client = new GraphQLHttpClient(Api_Url, new NewtonsoftJsonSerializer());

var request = new GraphQLRequest
{
    Query = {query}
};

var response = await client.SendQueryAsync<my_class>(request);

Upvotes: 3

PraveenLearnsEveryday
PraveenLearnsEveryday

Reputation: 595

Not sure if you are still looking for it. One can always use GraphQl.Client nuget to achieve this. Sample code to consume is

var  query = @"query($id: String) { device (id: $id) { displayName, id } }";
var request = new GraphQLRequest(){
                                Query = query,
                                Variables = new {id =123}  
                            };

var graphQLClient = new GraphQLClient("http://localhost:8080/api/GraphQL");

graphQLClient.DefaultRequestHeaders.Add("Authorization", "yourtoken");

var graphQLResponse = await graphQLClient.PostAsync(request);
            
Console.WriteLine(graphQLResponse.Data);

Upvotes: 2

Related Questions