【问题标题】:Consume and Configure Graphql request from .Net C# console application client使用和配置来自 .Net C# 控制台应用程序客户端的 Graphql 请求
【发布时间】:2021-11-27 21:47:13
【问题描述】:

我正在尝试从 C# 客户端使用 Graphql Api。为此,我正在使用 GraphQl.Net Nuget 包。问题是,我不知道如何设置 Api Url,因为我没有 HttpRequest 对象,这也会导致其他问题,即我无法设置身份验证标头并将令牌与请求一起发送。我的代码如下:

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);
}

调用者看起来像这样:

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 });

我对这个主题完全陌生,感谢任何帮助。非常感谢!!

【问题讨论】:

  • 在使用 GraphQLHttpClient 时如何处理节流参数响应??

标签: c# .net graphql


【解决方案1】:

这对我有用。您将需要 GraphQL.Client 包。 My_class 是反序列化的类。

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

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

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

【讨论】:

【解决方案2】:

不确定您是否还在寻找它。人们总是可以使用 GraphQl.Client nuget 来实现这一点。要使用的示例代码是

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);

【讨论】:

  • 查询真的应该是字符串吗?任何库都可以基于某种模式来做到这一点?
  • 在我的示例中,我使用了 Graphql.Net 客户端。专门用于查询,它实际上是一个 POCO 类,它应该具有 graphql 查询的这些基本构建块。示例是 public class GraphQLQueryDTO { public string OperationName { get;放; } 公共字符串 NamedQuery { 获取;放; } 公共字符串查询 { 获取;放; } 公共字符串变量 { 获取;放; } }
  • 试试这个链接以获得一个完整的例子red-gate.com/simple-talk/dotnet/net-development/…
猜你喜欢
  • 1970-01-01
  • 2021-01-27
  • 2018-08-22
  • 1970-01-01
  • 2018-04-05
  • 2020-01-29
  • 1970-01-01
  • 1970-01-01
  • 2016-12-07
相关资源
最近更新 更多