[英]Webapi CORS not working with breezejs/Odata V4
我试图在我的webapi上启用CORS,以便可以使用breezejs从另一个项目中使用它。 在我的webapi中,我启用了OData V4并创建了一个供微风使用的edm模型,如下所示:
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<ModuleEntity>("ModuleEntities");
builder.EntitySet<DomainEntity>("DomainEntities");
builder.EntitySet<ApiUserEntity>("ApiUserEntities");
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: "",
model: builder.GetEdmModel());
这三个实体集都有自己的源自odatacontrollers的控制器。
我已经在我的webapi中启用了cors,如下所示:
// see http://stackoverflow.com/questions/18032360/cors-using-asp-net-web-api-2-odata-and-breeze for last 2 parameters
var cors = new EnableCorsAttribute("*", "*", "*", "DataServiceVersion, MaxDataServiceVersion"); // origins, headers, methods
config.EnableCors(cors);
当我尝试访问localhost:22594 / $ metadata时,我得到了包含上面配置的EDM模型数据的正确的xml。
从我的使用breezejs和Firefox的web项目中,我收到一条消息,当它尝试查询localhost:22594 / $ metadata时未启用cors,并且不允许我从该来源读取它。
我正在执行这样的微风查询:
// setup dataservice
this.dataService = new this.breeze.DataService({
serviceName: "http://localhost:22594/"
});
// initialize adapter with OData as dataservice
this.breeze.config.initializeAdapterInstances({ dataService: "OData" });
this.manager = new this.breeze.EntityManager({ dataService: this.dataService });
// query ApiUser entity
var query = this.breeze.EntityQuery().from("ApiUser");
// execute query
this.manager.executeQuery(query);
我仍然对breezejs还是陌生的,所以现在我不知道我的错误是否在于使用breezejs或我的webaopi配置。 我已经尝试了很多东西,但是我似乎无法弄清楚我在做什么错。
我可能已经找到了解决方案。 首先,我不得不切换回odata v3。 事实证明breezejs / datajas尚未与v4兼容。
之后,我遇到了一条新的错误消息,说它无法读取null的“ end”。 也无法找到关于该消息的任何信息,因此进行了一些试验。 原来,我所有的模型类都在各自的文件夹中。 我为每个实体使用了不同的命名空间的说明。
从breezejs文档中:( http://www.getbreezenow.com/documentation/odata-server )
如果您的模型类具有多个名称空间,则会陷入困境。 据我们所知,Web API OData无法处理位于多个名称空间中的模型类。
我将每个实体都放在同一文件夹中,以便它们都使用相同的名称空间和瞧! 现在,我终于可以使用odata与breezejs查询我的webapi!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.