- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试针对基于 Microsoft Web API 2 构建的 ODATA 服务使用 Breeze.js 查询。
当 UI 和 ODATA Controller 位于同一个 Web 应用程序中时,一切都按预期运行。
然后我决定将我的数据服务和 Web 应用程序放入单独的项目中。我安装了所需的 CORS 包。当我从 LinqPad 发送查询时,我的数据服务功能齐全。
但是,Breeze 无法解析到达的响应负载。
这是我的相关控制台跟踪:
XHR finished loading: GET "http://localhost:63494/odata/$metadata". (index):1
XHR finished loading: GET "http://localhost:63494/odata/Positions?$filter=(PeriodEndDate%20eq%20dateti…ue%2CCustodianAccountCode%2CCustodianCode%2CSubBusinessUnit%2CStrategyCode".
[Q] Unhandled rejection reasons (should be empty):
["Error↵ at createError (http://localhost:57299/S…/localhost:57299/Scripts/datajs-1.1.3.js:2587:25)"]
q.js:989
在调试器中,我可以看到带有数据的响应从服务器到达,但 Breeze 无法从 json 中解析数据。
我的环境:
在 ODATA 服务器端,我安装了以下相关软件包:
<package id="Breeze.EdmBuilder" version="1.0.5" targetFramework="net45" />
<package id="Breeze.Server.ContextProvider" version="1.4.12" targetFramework="net45" />
<package id="Breeze.Server.ContextProvider.EF6" version="1.4.12" targetFramework="net45" />
<package id="Breeze.Server.WebApi2" version="1.4.12" targetFramework="net45" />
<package id="EntityFramework" version="6.1.0" targetFramework="net45" />
<package id="jQuery" version="1.8.2" targetFramework="net40" />
<package id="jQuery.UI.Combined" version="1.8.24" targetFramework="net40" />
<package id="knockoutjs" version="2.2.0" targetFramework="net40" />
<package id="Microsoft.AspNet.Cors" version="5.2.0-rtm-140522" targetFramework="net45" />
<package id="Microsoft.AspNet.Mvc" version="5.2.0-rtm-140521" targetFramework="net45" />
<package id="Microsoft.AspNet.OData" version="5.2.0-rtm-140521" targetFramework="net45" />
<package id="Microsoft.AspNet.Providers.Core" version="1.2" targetFramework="net40" />
<package id="Microsoft.AspNet.Providers.LocalDB" version="1.1" targetFramework="net40" />
<package id="Microsoft.AspNet.Razor" version="3.2.0-rtm-140521" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi" version="5.2.0-rtm-140521" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.0-rtm-140522" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.0-rtm-140522" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Cors" version="5.2.0-rtm-140522" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.OData" version="5.2.0-rtm-140521" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Tracing" version="5.2.0-rtm-140521" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.0-rtm-140521" targetFramework="net45" />
<package id="Microsoft.AspNet.WebPages" version="3.2.0-rtm-140521" targetFramework="net45" />
<package id="Microsoft.Data.Edm" version="5.6.1" targetFramework="net45" />
<package id="Microsoft.Data.OData" version="5.6.1" targetFramework="net45" />
<package id="Microsoft.OData.Core" version="6.3.0" targetFramework="net45" />
<package id="Microsoft.OData.Edm" version="6.3.0" targetFramework="net45" />
<package id="Microsoft.Spatial" version="6.3.0" targetFramework="net45" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net40" />
<package id="Newtonsoft.Json" version="6.0.3" targetFramework="net45" />
<package id="System.Spatial" version="5.6.1" targetFramework="net45" />
<package id="WebActivator" version="1.5.3" targetFramework="net45" />
在网络应用程序(ODATA 客户端)端,我有:
<package id="Antlr" version="3.5.0.2" targetFramework="net45" />
<package id="Breeze.Client" version="1.4.12" targetFramework="net45" />
<package id="Breeze.Server.ContextProvider" version="1.4.12" targetFramework="net45" />
<package id="Breeze.Server.WebApi2" version="1.4.12" targetFramework="net45" />
<package id="datajs" version="1.1.3" targetFramework="net40" />
<package id="DotNetOpenAuth.AspNet" version="4.3.4.13329" targetFramework="net40" requireReinstallation="True" />
<package id="DotNetOpenAuth.Core" version="4.3.4.13329" targetFramework="net40" requireReinstallation="True" />
<package id="DotNetOpenAuth.OAuth.Consumer" version="4.3.4.13329" targetFramework="net40" requireReinstallation="True" />
<package id="DotNetOpenAuth.OAuth.Core" version="4.3.4.13329" targetFramework="net40" requireReinstallation="True" />
<package id="DotNetOpenAuth.OpenId.Core" version="4.3.4.13329" targetFramework="net40" requireReinstallation="True" />
<package id="DotNetOpenAuth.OpenId.RelyingParty" version="4.3.4.13329" targetFramework="net40" requireReinstallation="True" />
<package id="EntityFramework" version="6.1.1-beta1" targetFramework="net45" />
<package id="jQuery" version="2.1.1" targetFramework="net40" />
<package id="jquery.event.drag" version="2.2.0" targetFramework="net40" />
<package id="jQuery.UI.Combined" version="1.10.4" targetFramework="net40" />
<package id="jQuery.Validation" version="1.12.0" targetFramework="net40" />
<package id="knockoutjs" version="3.1.0" targetFramework="net40" />
<package id="Microsoft.AspNet.Mvc" version="5.2.0-rtm-140523" targetFramework="net45" />
<package id="Microsoft.AspNet.Mvc.FixedDisplayModes" version="5.0.0" targetFramework="net45" />
<package id="Microsoft.AspNet.Razor" version="3.2.0-rtm-140523" targetFramework="net45" />
<package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi" version="5.2.0-rtm-140523" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.0-rtm-140523" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.0-rtm-140523" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.OData" version="5.2.0-rtm-140523" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.0-rtm-140523" targetFramework="net45" />
<package id="Microsoft.AspNet.WebPages" version="3.2.0-rtm-140523" targetFramework="net45" />
<package id="Microsoft.AspNet.WebPages.Data" version="3.2.0-rtm-140523" targetFramework="net45" />
<package id="Microsoft.AspNet.WebPages.OAuth" version="3.2.0-rtm-140523" targetFramework="net45" />
<package id="Microsoft.AspNet.WebPages.WebData" version="3.2.0-rtm-140523" targetFramework="net45" />
<package id="Microsoft.Bcl" version="1.1.9" targetFramework="net40" requireReinstallation="True" />
<package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net40" />
<package id="Microsoft.Data.Edm" version="5.6.1" targetFramework="net45" />
<package id="Microsoft.Data.OData" version="5.6.1" targetFramework="net45" />
<package id="Microsoft.jQuery.Unobtrusive.Ajax" version="3.2.0-rtm-140523" targetFramework="net45" />
<package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.0-rtm-140523" targetFramework="net45" />
<package id="Microsoft.Net.Http" version="2.2.22" targetFramework="net40" requireReinstallation="True" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net40" />
<package id="Modernizr" version="2.7.2" targetFramework="net45" />
<package id="Newtonsoft.Json" version="6.0.3" targetFramework="net45" />
<package id="Q" version="1.0.0" targetFramework="net45" />
<package id="SlickGrid" version="2.2.20140120" targetFramework="net40" />
<package id="System.Spatial" version="5.6.1" targetFramework="net45" />
<package id="WebActivator" version="1.5.3" targetFramework="net45" />
<package id="WebGrease" version="1.6.0" targetFramework="net45" />
我在 ODATA 端的 Controller 如下所示:
public class PositionsController : ODataController
{
private AG_DWEntities db = new AG_DWEntities();
public PositionsController()
{
db.Database.Log = s => Debug.WriteLine(s);
}
// GET odata/Positions
[EnableQuery]
public IQueryable<Position> GetPositions()
{
return db.Positions;
}
// GET odata/Positions(5)
[EnableQuery]
public SingleResult<Position> GetPosition([FromODataUri] string key)
{
return SingleResult.Create(db.Positions.Where(position => position.CCY == key));
}
我在数据服务器端使用 Breeze 的 EdmBuilder(而不是 ODataConventionModelBuilder):
private static IEdmModel GetEdmModelModelForBreeze()
{
return EdmBuilder.GetEdm<AG_DWEntities>();
}
CORS 的启用方式是:
config.EnableCors(new EnableCorsAttribute("*", "*", "*", "*"){ SupportsCredentials = true, PreflightMaxAge = long.MaxValue});
在 Web 应用程序中,查询如下所示:
var serverAddress = "http://localhost:63494/odata/";
breeze.config.initializeAdapterInstances({ dataService: "webApiOData" });
var manager = new breeze.EntityManager(serverAddress);
my.vm = {
positions: ko.observableArray([]),
load: function () {
var query = breeze.EntityQuery
.from("Positions")
.where("PeriodEndDate", "==", new Date(Date.UTC(2014, 0, 30, 0, 0, 0, 0)))
.where("Portfolio", "==", "SUPR")
.take(200)
.orderBy("AGPositionKeyId")
.select("ID,Portfolio,AGPositionKeyId,BookEndingMarketValue,CustodianAccountCode,CustodianCode,SubBusinessUnit,StrategyCode");
try {
manager.executeQuery(query)
.then(function(data) {
$.each(data.results, function(i, c) {
my.vm.positions.push(c);
})
.fail(function(e) {
alert(e);
});
});
} catch (e) {
alert(e);
};
},
}
my.vm.load();
ko.applyBindings(my.vm);
我见过this post ,并尝试从 ApiController 继承我的 Controller 并使用 Breeze 属性,但它也不起作用 - 我开始收到不同的服务器错误。
感谢您阅读我的长问题!
最佳答案
这个answer为我的问题提供了解决方案。
来自 WebApiConfig.cs:
//THIS DOESN'T WORK:
//var cors = new EnableCorsAttribute("*", "*", "*", null) { SupportsCredentials = true };
//NEITHER DOES THIS:
//var cors = new EnableCorsAttribute("*", "*", "*", "*") { SupportsCredentials = true };
//THIS WORKS:
var cors = new EnableCorsAttribute("*","*","*","DataServiceVersion, MaxDataServiceVersion"){SupportsCredentials = true};
config.EnableCors(cors);
datajs 需要这些响应 header :another discussion .
关于javascript - Breeze.js 到 ODATA Web API - CORS 请求失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23839897/
我正在考虑使用 Breeze js,并对其功能和随之而来的最佳实践有一些疑问。 服务器端元数据是否必须存在?如果我有一个非 EF WebApi Controller ,我是否仍然需要用 Provide
我们正在考虑使用breeze js来构建企业应用程序。 轻而易举的是,我们可以直接从客户端浏览器执行查询。这允许基于用户输入构造动态查询,而无需加载不必要的数据。我发现使用Breeze可以创建业务逻辑
我有一个从另一个表继承的表。当我运行该项目时,出现以下错误:无法获取未定义或空引用的属性“propertyref”...有什么想法吗? 最佳答案 编辑:从 v 1.3.1 Breeze 开始,现在支持
想知道是否有人知道扩展或配置 Breeze 以便服务器返回实体元数据中的附加信息的任何方法?我想使用这些附加数据来协助验证。 假设我有一个应用了一些数据注释的实体模型: public class Pe
我使用 Durandal/breeze 开发了一个 asp.net 解决方案。 这是我获取所有托运人的代码: var query = EntityQuery.from('Shippers')
我已经阅读了 Breeze 验证器信息,但不确定如何查看正在发生的实际错误。 错误:遇到客户端验证错误 - 有关更多详细信息,请参阅此对象上的实体错误集合。 我相信它在 entity.entityAs
我正在使用 Breeze 过滤客户端请求的数据。我的代码看起来有点像这样: 客户端 - 创建过滤谓词 var predicates = []; var criteriaPredicate = null
我在处理日期时遇到了一些问题。 我有一个带有日期字段的对象: public DateTime FechaInicio{get;设置; 此定义在数据库中生成以下字段: FechaInicio 日期时间不
我在处理日期时遇到了一些问题。 我有一个带有日期字段的对象: public DateTime FechaInicio{get;设置; 此定义在数据库中生成以下字段: FechaInicio 日期时间不
如果我使用微风加载部分实体: var query = EntityQuery.from('material') .select('Id, MaterialName, Mater
改进我关于如何使用获得的元数据在淘汰赛中创建验证规则的示例(http://stackoverflow.com/questions/13662446/knockout-validation-using-
我想更改 Breeze 的序列化程序,以便我的 javascript 对象是驼峰式的。在文档中它说这是可以做到的,但说这是有待解释的。 You can change the formatter's c
给定一个具有导航属性的实体,有没有办法判断空导航属性是否是因为子实体从未被加载,而不是集合已经加载但只是空的? 例如:我加载一个包含实体 A 列表的页面。每个实体 A 都有一个导航属性,它是实体 B
我使用 Entity Framework Code First + Durandal + Breeze 开发一个项目。 我有这些实体模型: public class Packing { [Ke
我正在尝试使用 breeze.js 保存一些实体。 Breeze 工作正常,它会根据需要保存所有更改。但是,我无法验证并确保授权是服务器端的。从我目前收集到的信息来看,我猜想做到这一点的唯一方法是检查
我们有一个轻而易举的客户解决方案,其中向父实体显示其子列表。我们对某些子实体进行硬删除。现在,当用户是执行删除操作的用户时,没有问题,但是当其他用户执行操作时,似乎没有办法使已经加载到缓存中的子项失效
我想用 Breeze.js 搜索文本 var qu = new breeze.EntityQuery("Projects") .where("Name", "s
从表面上看,这可能听起来像一个愚蠢的问题,但为什么 Hot Towel SPA Template包括 Breeze根本? 最近几天我一直在学习 Hot Towel 及其依赖项,据我所知,模板中没有任何
假设我想使用 Breeze 创建一个任务实体(我正在使用 EF),但是因为这是一个真实任务应用程序,所以该任务必须关联到当前登录的用户.任务具有需要在保存期间填充的 UserId 外键,这就是我遇到的
我正在尝试根据子实体的集合来过滤实体。这是我的实体(EF POCO): public class Customer { public int Id { get; set; } publ
我是一名优秀的程序员,十分优秀!