手机版

ASP.NET核心使用GraphQL第二章中间件

时间:2021-08-28 来源:互联网 编辑:宝哥软件园 浏览:

前言

在开始这篇文章之前,不熟悉GraphQL的朋友可以阅读以下文章:

前情提要:graphql用于ASP.NET核心-第1章Hello World

看完上面的文章,下面就不多说了。让我们来看看详细的介绍

中间件

如果你熟悉ASP.NET核心的中间件,你可能会注意到我们在之前的博客中使用了一个中间件。

app。run(async(context)={ var result=wait new document executer()。ExecuteAsync(doc={ doc。Schema=schema医生。Query=@ ' query { hello }}).配置等待(假);var JSON=new document writer(indent : true)。写入(结果)等待上下文。response . WriteAsync(JSON);});这个中间件负责输出当前查询的结果。

中间件的定义:

中间件是加载在应用程序管道中的组件,负责处理请求和响应。每个中间件

您可以选择是否将请求传递给应用程序管道中的下一个组件。您可以在应用程序管道中的下一个组件运行之前和之后执行一些操作

来源:微软文档

实际上,中间件是一个委托,或者更准确地说,是一个请求委托。顾名思义,中间件将处理请求,并决定是否将其委托给应用程序管道中的下一个中间件。在前面的示例中,我们使用IApplicationBuilder类的Run()方法配置了一个请求委托。

用动态查询体替换硬编码查询体

在我们前面的例子中,中间件中的代码非常简单,它只返回固定查询的结果。然而,在现实中,查询应该是动态的,所以我们必须从请求中读取查询主体。

在服务器端,每个请求委托可以接受一个HttpContext参数。如果通过POST请求将查询正文发送到服务器,您可以轻松地使用以下代码来获取请求正文的内容。

弦体;使用(var stream reader=new stream reader(HttpContext。请求.正文)){正文=等待流阅读器。ReadToEndAsync();}在获取请求正文的内容之前,我们需要检测一些当前的请求,以免引起任何问题

不管是不是POST请求都使用了特定的Url,比如/api/graphql,所以我们需要调整代码。

if(上下文。request . path . startswithsegments('/API/graph QL ')字符串。Equals(上下文。请求。方法,“开机自检”,字符串比较。ordinallignorcase)){字符串体;使用(var stream reader=new stream reader(context。请求.正文)){正文=等待流阅读器。ReadToEndAsync();}中的请求正文..可以包含许多字段。这里,我们同意传递给graphql的查询体的字段名是query。因此,我们可以将请求体中的JSON字符串转换为包含Query属性的复杂类型。

该复杂类型代码如下:

公共类GraphQLRequest { public string Query { get;设置;}}下一步是将当前请求体的内容反序列化为GraphQLRequest类型的实例。这里,我们需要用静态方法JsonConvert替换硬编码的查询体。Json.Net的反序列化对象。

var请求=JsonConvert。反序列化对象图形请求(正文);var result=等待新的DocumentExecuter()。ExecuteAsync(doc={ doc。Schema=schema医生。查询=请求。查询;}).配置等待(假);完成上述修改后,Startup.cs文件的Run方法应该如下所示。

应用程序.运行(异步(上下文)={ if(上下文)。请求。路径。starts with segments(//API/graph QL)字符串等于(上下文。请求。方法,"开机自检",字符串比较ordinallignorcase)){ 0字符串体;使用(var流阅读器=新流阅读器(上下文.请求。正文)){正文=等待流阅读器ReadToEndAsync();定义变量请求=JsonConvert .反序列化对象图形请求(正文);var Schema=new Schema { Query=new hello world Query()};var结果=等待新的DocumentExecuter().ExecuteAsync(doc={ doc .架构=架构医生。查询=请求。查询;}).配置等待(假);新文档编写器(缩进:为真).写(结果);等待上下文回应。write async(JSON);} }});最终效果

现在我们可以使用邮递员来创建一个邮政请求,请求结果如下:

结果正确返回了。

本篇源代码:https://github.com/lamondlu/GraphQL _ Blogs/tree/master/Part二世

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

版权声明:ASP.NET核心使用GraphQL第二章中间件是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。