【发布时间】:2015-04-11 13:23:27
【问题描述】:
使用 BreezeJS/Angular/WebAPI(OData),我建立了一个项目,我可以在其中调用 GET:
breeze.EntityQuery
.from(resource)
.using(manager)
.execute()
.then(function (data) {
deferred.resolve(data.results);
});
但是,当我尝试保存更改或创建新实体时:
var type = manager.metadataStore.getEntityType(model);
type.setProperties({
autoGeneratedKeyType: breeze.AutoGeneratedKeyType.KeyGenerator
});
var newM = manager.createEntity(type, m);
manager.saveChanges().then(function () { alert('success'); }, function (error) { prompt("", JSON.stringify(error)); });
我得到错误:
“未找到与请求 URI 'http://localhost:57508/odata/odata/Models'匹配的 HTTP 资源”
这很奇怪,因为 URL 错误。它有服务 url 和一个额外的“odata”。
我的 AngularJS 工厂非常简单:
app.factory("EntityManagerFactory", ['breeze', function (breeze) {
configureBreeze();
var serviceRoot = window.location.protocol + '//' + window.location.host + '/';
var serviceName = serviceRoot + 'odata/';
var factory = {
manager: newManager,
serviceName: serviceName,
metadataStore: {}
};
return factory;
function configureBreeze() {
// use Web API OData to query and save
breeze.config.initializeAdapterInstance('dataService', 'webApiOData', true);
// convert between server-side PascalCase and client-side camelCase
// breeze.NamingConvention.camelCase.setAsDefault();
}
function newManager() {
var mgr = new breeze.EntityManager(serviceName);
mgr.fetchMetadata().then(function () {
//var modelType = manager.metadataStore;
});
return mgr;
}
}]);
我不确定在哪里可以找到添加到生成的 URL 的额外“odata”。从 serviceName 中删除 'odata' 会阻止 GET 工作。
非常感谢。
【问题讨论】:
标签: .net angularjs odata breeze asp.net-web-api