【问题标题】:Using Breeze for arbitrary server response使用 Breeze 进行任意服务器响应
【发布时间】:2014-04-28 23:38:56
【问题描述】:

拥有使用 Breeze 和 webapi IQueryable<T> 在客户端创建复杂查询和获取数据的所有结构。

我会在客户端使用这个结构来调用另一个webapi控制器,截取查询的结果,并用它来制作一个HttpResponseMessage返回的Excel文件。

见:Returning binary file from controller in ASP.NET Web API

如何使用executeQuery 而不以标准 Breeze JSON 格式获取返回数据,并且不干扰客户端缓存中的数据以获得“八位字节流”。

目标是为大量数据创建一个“导出到 Excel”,而不需要现有的前端分页。

【问题讨论】:

    标签: breeze


    【解决方案1】:

    如果您不想跟踪更改,请先致电EntityQuery.noTracking(),然后再致电executeQuery()。这将返回没有微风跟踪功能的原始 javascript 对象。

    您不能让executeQuery() 返回二进制“八位字节流”数据。但是你可以使用微风 ajax 实现:

    var ajaxImpl = breeze.config.getAdapterInstance("ajax");
    ajaxImpl.ajax() // by default it is a wrapper to jQuery.ajax
    

    http://www.breezejs.com/documentation/customizing-ajax

    【讨论】:

      【解决方案2】:

      创建自定义“数据服务适配器”并在为此特殊目的创建 EntityManager 时指定它。它可能非常简单,因为您禁用了最难实现的部分,即元数据和 saveChanges 方法。

      您不想缓存结果。因此,请确保管理器的元数据存储为空,并且应添加“无缓存”查询选项。 [当我在手机上写这篇文章时,我没有想到确切的名字]。

      确保这些步骤真正增加了有形价值

      使用本机 AJAX 组件通常可以更简单地执行专门的服务器操作。

      附言我刚刚看到@didar 的答案与我的一致。将这些想法融入您的解决方案中。

      【讨论】:

      • 可以更简单地使用原生 AJAX 组件。真正想要采用的是我在客户端上创建“EntityQuery”的方法。尤其是调用“executeQuery”的“请求 URL”与所有参数一起发送。有什么方法可以使用“EntityQuery”(如“Uri builder”)来获取这些“URL”,以调用具有可查询(OData)属性的标准 Web api?
      • 在任何“数据服务适配器”中查找配方。调用的组件可能是可访问的(否则您将如何编写自己的适配器?)。这不是我们谈论的……部分原因是我们觉得我们没有看到足够广泛的远程服务 API 来锁定适配器 API。查看适配器代码以获得灵感会让你和我在同一条船上。:)
      • 这几乎所有的东西。唯一失败的是在 webapi 调用中拦截查询的方式。我使用 API 自动作为参数传递的 'ODataQueryOptions' 的 'ApplyTo' 方法。该查询附带所有内容,但是有错误,例如“检测到具有不兼容类型的二元运算符”。我将 BreezeQueryable 与 BreezeController 一起使用,而不是标准的 odata。此参数的资源与标准的微风不兼容?
      • DataService 必须具有某些分辨率的元数据,在我的自定义适配器上添加了 fetchMetadata,一切顺利。
      猜你喜欢
      • 2016-12-30
      • 2018-02-08
      • 1970-01-01
      • 2023-03-26
      • 2019-10-04
      • 2017-11-17
      • 2017-02-05
      • 2016-08-20
      • 2018-03-18
      相关资源
      最近更新 更多