Webapi CORS无法使用breezejs / Odata V4

时间:2014-11-30 19:18:27

标签: c# asp.net-web-api cors odata breeze

我正在尝试在我的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。

从我的webproject使用breezejs和Firefox但是当我尝试查询localhost:22594 / $ metadata并且我不允许从该源读取它时,我得到消息:cors未启用。

我正在执行breeze查询,如下所示:

// 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配置。我尝试了很多东西,但我似乎无法弄清楚我做错了什么。

1 个答案:

答案 0 :(得分:2)

我可能已经找到了解决方案。首先,我不得不切换回odata v3。事实证明,breezejs / datajas还不兼容v4。

之后我遇到了一条新的错误消息,说它无法读取&#39;结束&#39;为null。无法找到关于该消息的任何内容,或者进行了一些实验。 事实证明我的所有模型类都在各自的文件夹中。我为每个实体使用不同的命名空间。

来自breezejs文档:(http://www.getbreezenow.com/documentation/odata-server

如果您的模型类有多个命名空间,则会被卡住。据我们所知,Web API OData无法处理位于多个名称空间中的模型类。

我将每个实体放在同一个文件夹中,以便它们都使用相同的命名空间并瞧!我现在终于可以使用odata用breezejs查询我的webapi了!