如何在 Web Api 中手动执行 Breeze 过滤器?

2023-12-04

我想使用一些外部服务器端逻辑来修改查询结果的属性。为此,我需要应用 Breeze 查询选项、修改结果集并返回它。

我基本上知道如何申请OdataQueryOptions我的查询,但我不想错过 BreezeJS 所做而 Web Api 的 OData 所做不到的所有事情。例如,我想保留inlineCount.

我怎样才能做到这一点?有什么方法可以连接到 Breeze 的查询修改代码吗?

如果重要的话,我正在使用 Entity Framework 6 和 Web Api 2。


好吧,我不确定是否有更好的方法(因为这似乎是一个常见用例的大量工作),但这是我解决这个问题的方法。

我继承自QueryHelper类来修改PostExecuteQuery方法来执行委托。

public class ExtendedQueryHelper : QueryHelper
{
    public ExtendedQueryHelperOptions Options { get; set; }

    public ExtendedQueryHelper(ODataQuerySettings querySettings) : base(querySettings)
    {}

    public override IEnumerable PostExecuteQuery(IEnumerable queryResult)
    {
        if (Options != null && Options.PostExecuteQueryHandler != null)
        {
            return Options.PostExecuteQueryHandler(queryResult);
        }

        return base.PostExecuteQuery(queryResult);
    }
}

委托是在一个名为的类中定义的ExtendedQueryHelperOptions

public class ExtendedQueryHelperOptions
{
    private const string EXTENDED_QUERY_HELPER_OPTIONS_KEY = "EXTENDED_QUERY_HELPER_OPTIONS_KEY";
    public delegate IEnumerable PostExecuteQueryDelegate(IEnumerable queryResult);

    public PostExecuteQueryDelegate PostExecuteQueryHandler { get; set; }

    public void InjectIntoRequest(HttpRequestMessage request)
    {
        request.Properties.Add(EXTENDED_QUERY_HELPER_OPTIONS_KEY, this);
    }

    public static ExtendedQueryHelperOptions GetFromRequest(HttpRequestMessage request)
    {
        object options;
        request.Properties.TryGetValue(EXTENDED_QUERY_HELPER_OPTIONS_KEY, out options);

        return (ExtendedQueryHelperOptions)options;
    }
}

为了设置这些选项,我必须继承BreezeQueryableAttribute并在以下情况下注入这些选项QueryHelper正在创建:

public class ExtendedBreezeQueryableAttribute : BreezeQueryableAttribute
{
    protected HttpRequestMessage Request { get; set; }

    public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        Request = actionContext.Request;
        base.OnActionExecuting(actionContext);
    }

    protected override QueryHelper NewQueryHelper()
    {
        var queryHelper = new ExtendedQueryHelper(GetODataQuerySettings());
        queryHelper.Options = ExtendedQueryHelperOptions.GetFromRequest(Request);

        return queryHelper;
    }
}

现在我可以注入要在过滤结果上运行的代码,如下所示:

[BreezeController]
public class BreezeController : BaseController
{
    //...

    [HttpGet]
    [ExtendedBreezeQueryable]
    public IQueryable<Foo> Foos()
    {
        var options = new ExtendedQueryHelperOptions
        {
            PostExecuteQueryHandler = delegate(IEnumerable results) {
                // This code will be run after the querying has been
                // applied by Breeze
                var foos = results.Cast<Foo>().ToList();

                foreach (var foo in foos)
                {
                    foo.ComputedProperty = ComputeSomething();
                }

                return foos;
            }
        };

        // Inject these options into the Request, so the ExtendedBreezeQueryableAttribute
        // can get to them later
        options.InjectIntoRequest(Request);
        return Db.Foos;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Web Api 中手动执行 Breeze 过滤器? 的相关文章

  • ASP.NET WebApi - 一个控制器中的多个 GET 操作

    I have Users控制器和基本 REST 模式工作得很好 不过我需要一种额外的模式users id usergroups这将返回该用户的所有用户组 实现这一点的最佳方法是什么 因为我想我将需要在更多控制器上使用类似的路由 仅使用默认值
  • 生成Excel文件错误

    我在经典 ASP 中使用以下代码生成 Excel 文件 代码很简单并且有效 我在 Windows Vista x86 上的 IIS 7 0 下运行代码 两个问题 有一个奇怪的警告框 这是屏幕快照 http i27 tinypic com 2
  • ELMAH 将其数据保存在哪里?

    我刚刚安装了 ELMAH MVC 更多信息here http nuget org packages Elmah MVC 并且想知道其数据保存在哪里 我读到您可以选择设置数据库进行存储 但似乎默认安装使用 内存中 它是如何工作的 如果我回收应
  • InvalidOperationException:无法解析类型“Microsoft.AspNetCore.Http.IHttpContextAccessor”的服务

    我开始将我的 asp net core RC1 项目转换为 RC2 并面临现在的问题IHttpContextAccessor没有解决 为了简单起见 我使用 Visual Studio 模板创建了新的 ASP NET RC2 项目ASP NE
  • C# 枚举 - 根据掩码检查标志

    我有以下枚举标志 Flags private enum MemoryProtection uint None 0x000 NoAccess 0x001 ReadOnly 0x002 ReadWrite 0x004 WriteCopy 0x0
  • 生成 .tail IL 指令的简单 F# 代码是什么?

    我想看看 tailIL 指令 但我一直在编写的使用尾部调用的简单递归函数显然已优化为循环 我实际上是在猜测这一点 因为我不完全确定反射器中的循环是什么样的 我绝对没有看到任何 tail不过操作码 我在项目的属性中检查了 生成尾部调用 我还尝
  • C# 中处理 SQL 死锁的模式?

    我正在用 C 编写一个访问 SQL Server 2005 数据库的应用程序 该应用程序是数据库密集型的 即使我尝试优化所有访问 设置适当的索引等 我预计迟早会遇到死锁 我知道为什么会发生数据库死锁 但我怀疑我能否在某个时候发布不发生死锁的
  • 检测 SignalR Hub 客户端立即断开连接

    SignalR Hub OnDisconnected 何时在服务器端引发 对于崩溃或关闭而不调用Stop method 我正在使用 SignalR NET 客户端进行测试 而不是 javascript 客户端 如果我打电话给Stop客户端上
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • 将文本从文本文件添加到 PDF 文件[重复]

    这个问题在这里已经有答案了 这是我的代码 using FileStream msReport new FileStream pdfPath FileMode Create step 1 using Document pdfDoc new D
  • 我应该对 ObjectContext 使用 using 关键字吗?

    我在这个网站或 CodeProject 的某个地方读到 好的规则是 如果某个类已经实现了 IDisposable 接口 那么您应该使用 using 关键字 因为使用翻译成 MSIL 的关键字会尝试 最终阻止如下内容 try some log
  • .NET 中严格浮点数学的库

    我有 Java 算法 计算及其单元测试 单元测试期望结果具有一定的精度 增量 现在我将算法移植到 NET 中 并希望使用相同的单元测试 我使用双数据类型 问题在于 Java 使用 strictfp 64 位 来执行 Math 类中的某些操作
  • WCF 服务调用包装器

    为 WCF 服务调用创建包装器的最佳实践是什么 我认为有必要 为了在同一个地方监视所有呼叫 我正在考虑使用这种代码 这是正确的想法吗 RetType t ServiceExecutionContext
  • 序列包含多个元素

    我在通过 Linq 获取 RhsTruck 类型的列表并显示它们时遇到一些问题 RhsTruck 只有属性 品牌 型号 序列号 等 RhsCustomer 具有 CustomerName CustomerAddress 等属性 我不断收到错
  • 如何获取可用系统内存的大小?

    C NET 中是否可以获取系统可用内存的大小 如果是的话怎么办 Use Microsoft VisualBasic Devices ComputerInfo TotalPhysicalMemory http msdn microsoft c
  • 使用 Kentor.AuthServices.StubIdp 作为生产 IDP

    我正在尝试在我的应用程序中实现 IDP SAML2 服务器 鉴于我的应用程序拥有所需的所有数据 我不希望我的任何合作伙伴要求我们的客户在他们这边注册 我对 SAML2 协议不是很熟悉 我找到了这个项目Kentor AuthServices
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • 对已经排序的数组进行快速排序

    在这个问题中 https www quora com What is randomized quicksort 阿莱霍 豪斯纳 Alejo Hausner 说道 最坏情况下快速排序的成本 that 讽刺的是 如果您将快速排序应用于已经排序的
  • 自动生成 .NET 故障转储

    我知道如何使用 ADPlus 或 DebugDiag 生成故障转储文件 但我想知道是否有一种方法可以在客户的计算机上执行此操作而无需安装这些工具 具体来说 我希望能够配置我的应用程序 例如 使用注册表值 在发生严重故障时生成故障转储 更具体
  • 如何删除字符串的一部分?

    假设我有test 23我想删除test 我怎么做 前面的前缀 可以换 我最喜欢的方法是 拆分和弹出 var str test 23 alert str split pop gt 23 var str2 adifferenttest 153
  • 在 Eclipse Android 中导入 JAR (JAudioTagger)

    我正在开发一个加载 mp3 文件的歌曲数据的程序 我正在尝试导入 JAudioTagger 来帮助加载歌曲信息 JAudioTagger 是一个 jar 文件 我进入导入窗口 但面临许多我不确定的导入选项 看起来有三种可行的选择 EJB J
  • 如何创建项目模板

    关于自定义模板的主题 我正在自学如何使用 xcode 7 和 Objective C 来做到这一点 但我陷入了困境 到目前为止 通过阅读 S O 上的其他帖子我通过复制单视图应用程序并将其放入 xcode 包的正确目录中 成功创建了一个自定
  • mocha中的异步函数 before() 总是在 it() 规范之前完成?

    我有一个回调函数before 这是为了清理数据库 一切都在before 保证在之前完成it 开始 before function db collection user remove function res is it guaranteed
  • 如何在R中获得与Stata中相同的AIC和BIC值?

    假设我有一个非常简单的模型 library foreign smoke lt read dta http fmwww bc edu ec p data wooldridge smoke dta smoking reg lt lm cigs
  • 在 C 中如何将函数作为参数传递?

    我想创建一个函数 该函数对一组数据执行通过参数传递的函数 在 C 中如何将函数作为参数传递 宣言 采用函数参数的函数原型如下所示 void func void f int 这表明参数f将是一个指向函数的指针 该函数具有void返回类型并且需
  • 获取最后更新的数据 - Codeigniter

    我在 codeigniter 工作 我有一个方案表 我的问题是我想显示每个方案的最后更新数据 我不知道该怎么做 请帮忙 my table scheme code updated on scheme name 1 2015 04 13 One
  • 使用ejabberd时有没有办法打包msg?

    我正在测试 ejabberd 的 mucroom 测试客户是Tsung 测试条件 一台ejabberd服务器 4核16G RAM 3000 个用户加入 1 个 mucroom 用户1分钟内随机发送一条消息 每个用户发送5条消息 服务器操作系
  • 将网页另存为PDF到指定目录

    我有它会打开 Internet Explorer 给用户 另存为 框 然后退出 但是 我更希望用户不必导航到正确的文件夹 而是目录来自工作表中的单元格并将网页另存为 PDF 我已经安装了完整的 Adob e 代码 Sub WebSMacro
  • 管理文件共享上的远程 DACL:Win32_ACE 到 Win32_Share

    目标 向现有文件共享添加本地用户帐户共享级读 写权限 我在开发这个方面遇到了障碍 显然 Microsoft 希望您将用户的 ACE 添加到 DACL 然后返回到共享的安全描述符中 1 不 NET SHARE ADD 不适用于现有共享 我很惊
  • 使用龙卷风处理标准输入

    如何监听 Tornado 循环中 stdin 上发生的事件 特别是 在龙卷风系统中 我想从标准输入中读取数据 对其做出反应 并在标准输入关闭时终止 同时 Tornado Web 服务也在同一进程上运行 在寻找这个时 我能找到的最相似的是处理
  • 电子邮件身份验证(Gmail、Yahoo 等)--android [重复]

    这个问题在这里已经有答案了 我对这个主题还很陌生 是否可以一次性验证所有电子邮件 ID 实际需要是我想在我的应用程序中验证电子邮件 gmail yahoo 等 一旦验证批准 它应该继续到我的应用程序 它可能是单点登录或其他什么 这可以做到吗
  • 将对象转换为派生类的对象

    我有课Record效果很好 public class Record protected string table protected string idcolumn public Record string table string idc
  • 如何让awk忽略双引号内的字段分隔符? [复制]

    这个问题在这里已经有答案了 我需要删除逗号分隔值文件中的 2 列 考虑 csv 文件中的以下行 email protected www example com field2 field3 field4 email protected fie
  • 如何在 React 中循环一个对象?

    React 新手 尝试循环对象属性 但 React 抱怨对象不是有效的 React 子对象 有人可以给我一些关于如何解决此问题的建议吗 我已经添加了 createFragment 但不完全确定需要去哪里或者我应该采取什么方法 JS var
  • 获取 mongoid 生成的原始 mongo db 查询表达式

    我想获取 mongoid 生成的 mongo 查询表达式该怎么做 例如这是 mongoid 语法 History where report type params report type order by ts 1 only ts last
  • 在 MVC4 中使用 DotNetOpenAuth 获取 Twitter 访问密钥

    我正在使用 MVC4 创建一个应用程序 该应用程序将授权用户使用 Twitter 并允许他们也从该应用程序发送推文 我可以使用 MVC4 中的BuiltInOAuthClient Twitter 毫无问题地对用户进行身份验证 http ww
  • 如何在 Web Api 中手动执行 Breeze 过滤器?

    我想使用一些外部服务器端逻辑来修改查询结果的属性 为此 我需要应用 Breeze 查询选项 修改结果集并返回它 我基本上知道如何申请OdataQueryOptions我的查询 但我不想错过 BreezeJS 所做而 Web Api 的 OD