使用Breeze进行任意服务器响应

使用Breeze进行任意服务器响应,breeze,Breeze,使用Breeze和webapiIQueryable在客户端创建复杂查询和获取数据的所有结构 我将在客户端使用此结构调用另一个webapi控制器,截取查询结果,并使用此结构生成由HttpResponseMessage返回的Excel文件 见: 如何使用executeQuery,而不获取标准Breeze JSON中的返回数据,也不干扰客户端缓存中的数据以获得“八位字节流” 目标是创建一个“导出到Excel”,而无需对大量数据进行现有前端分页。如果不想跟踪更改,请在调用executeQuery()之前

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

我将在客户端使用此结构调用另一个webapi控制器,截取查询结果,并使用此结构生成由
HttpResponseMessage
返回的Excel文件

见:

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


目标是创建一个“导出到Excel”,而无需对大量数据进行现有前端分页。

如果不想跟踪更改,请在调用
executeQuery()
之前调用
EntityQuery.noTracking()
。这将返回没有breeze跟踪功能的原始javascript对象

无法使
executeQuery()
返回二进制“八位字节流”数据。但您可以使用breeze ajax实现:

var ajaxImpl = breeze.config.getAdapterInstance("ajax");
ajaxImpl.ajax() // by default it is a wrapper to jQuery.ajax
查看创建自定义“数据服务适配器”,并在为此特殊目的创建EntityManager时指定它。它可以非常简单,因为您禁用了最难实现的部分,即元数据和saveChanges方法

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

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

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


p、 我刚刚看到了@didar的答案,这与我的答案是一致的。将这些想法融入到您的解决方案中。

可以更简单地使用本机AJAX组件。我真正想采用的是在客户端上创建“EntityQuery”的方法。特别是调用“executeQuery”的“请求URL”发送所有参数。使用诸如“Uri生成器”之类的“EntityQuery”调用具有可查询(OData)属性的标准web api,有没有办法获取这些“URL”?请在任何“数据服务适配器”中查找配方。调用的组件可能是可访问的(否则您将如何编写自己的适配器?)。这不是我们谈论的事情。。。部分原因是我们觉得我们没有看到足够多的远程服务API来锁定适配器API。查看适配器代码以获得灵感将使您与我处于同一条船上。:)这里几乎什么都有。唯一失败的是在webapi调用中拦截查询的方法。我使用“ODataQueryOptions”的“ApplyTo”方法,该方法由api自动作为参数传递。查询附带了所有内容,但都有错误,如“检测到具有不兼容类型的二进制运算符”。我将BreezeQueryable与BreezeController一起使用,而不是标准的odata。此参数的资源与标准breeze不兼容?DataService必须具有某些分辨率的元数据,在我的自定义适配器上添加fetchMetadata,并且一切正常。