首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >热巧克力(GraphQL)拦截器/中间件,用于在数据获取之前获取IQueryable

热巧克力(GraphQL)拦截器/中间件,用于在数据获取之前获取IQueryable
EN

Stack Overflow用户
提问于 2021-07-21 01:40:36
回答 1查看 595关注 0票数 0

我需要对生成的IQueryable做一些额外的事情,但是我不能创建一个拦截器来获取IQueryable (例如,记录GraphQL请求创建的查询)。

我仍然在深入研究热巧克力这一伟大的材料,但对于初学者来说,我有以下几点:

一直向前,对吧?但是现在我想要一个拦截器(或者类似的东西),它可以在主体响应的结果之前给出生成的IQueryable的其余部分。

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-21 02:10:02

您可以通过使用中间件来完成此操作。

代码语言:javascript
代码运行次数:0
运行
复制
public class Query
{
    [UseYourCustom]
    [UseProjection]
    [UseFiltering]
    [UseSorting]
    public IQueryable<Person> GetPersons() => //...
}

public class UseYourCustomAttribute : ObjectFieldDescriptorAttribute
{
    public override void OnConfigure(
        IDescriptorContext context,
        IObjectFieldDescriptor descriptor,
        MemberInfo member)
    {
        descriptor.Use(next => async context =>
        {
            // before the resolver pipeline
            await next(context);
            // after the resolver pipeline

            if (context.Result is IQueryable<Person> query)
            {
               // all middleware are applied to `query`
            }
        });
    }
}

在版本12中,您还可以执行以下操作:

代码语言:javascript
代码运行次数:0
运行
复制
public class Query
{
    [UseProjection]
    [UseFiltering]
    [UseSorting]
    public IQueryable<Person> GetPersons(IResolverContext context)
    {
        IQueryable<Person> person = //...

        var allMiddlewareApplied = persons
            .Sort(context)
            .Filter(context)
            .Project(context);

        return allMiddlewareApplied
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68459215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档