繁体   English   中英

BreezeJS不查询CORS OData Web API服务

[英]BreezeJS not querying an CORS OData web api service

我正在尝试使用breezejs来查询托管在单独的应用程序实例/域中的webapi odata服务。

我已经按照BreezeJS官方网站上的说明进行了所有设置,并且此博客文章的代码相同,只是服务地址位于另一个域上。

这是代码示例:

    var serverAddress = 'http://mydomain.com:49074/odata/';
    breeze.config.initializeAdapterInstances({ dataService: "OData" });

    var manager = new breeze.EntityManager(serverAddress);
    var query = breeze.EntityQuery.from('Technology').where("Id", ">", 3); //!!!not executed

    manager.executeQuery(query, function (data) {
        debugger;
        alert('tada');
    });

这样的形式的查询不会被执行, 但是应该可以工作 并得到这样的回应:

标头:

要求网址: http : //mydomain.com : 49074/odata/ $ metadata
请求方法:GET
状态码:200 OK

响应:

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">
  <edmx:DataServices m:DataServiceVersion="3.0" m:MaxDataServiceVersion="3.0" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
    <Schema Namespace="Devup.Model" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
      <EntityType Name="Technology">
        <Key>
          <PropertyRef Name="Id" />
        </Key>
        <Property Name="Id" Type="Edm.Int32" Nullable="false" />
        <Property Name="Name" Type="Edm.String" Nullable="false" />
      </EntityType>
    </Schema>
    <Schema Namespace="WebAPIODataWithBreezeConsumer.Models" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
      <EntityContainer Name="Container" m:IsDefaultEntityContainer="true">
        <EntitySet Name="Technology" EntityType="Devup.Model.Technology" />
      </EntityContainer>
    </Schema>
  </edmx:DataServices>
</edmx:Edmx>

但是请注意,如果我将查询更新为:

var query = breeze.EntityQuery.from('Technology?')。where(“ Id”,“>”,3);

要么

var query = breeze.EntityQuery.from('Technology /')。where(“ Id”,“>”,3);

然后我点击了后端代码(断点),它没有过滤结果,但是点击了后端...

有谁知道为什么如此奇怪的行为以及如何解决此问题

不确定发生了什么,但您可以通过将元数据查询与数据查询隔离来简化问题。 默认情况下,Breeze尝试在尝试执行查询本身之前解析任何查询的元数据。 每个数据服务端点只需进行一次元数据解析,并且通常会在您的第一个查询中显示为两次往返。 这会使调试问题变得困难。

另一种方法是通过通过显式执行元数据查询来强制元数据查询在您的第一个数据查询之前发生

// fetch the metadata
myEntityManager.fetchMetadata().then(function() {
   return myEntityManager.executeQuery(myQuery);

}).then(function(data) {
// fetch the data 
   var results = data.results;
});

使用此设置,您可以确定元数据查询失败还是数据查询失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM