无法为Web API OData端点解析MapODataRoute

时间:2013-04-26 15:40:44

标签: asp.net-web-api odata

我正在尝试为我的Web API服务配置OData端点,但我无法解析MapODataRoute方法。根据这个tutorial,以下是关于要求的说明:

  

ASP.NET和Web Tools 2012.2更新 Microsoft ASP.NET Web API   OData NuGet包。

我安装了当前的ASP.NET和Web Tools 2012.2更新(已卸载RC版本并安装了最新版本),因此我的项目就足够了。

但是我无法通过以下代码行:

config.Routes.MapODataRoute("ODataRoute", "odata", model);

...由于以下异常:

  

'System.Web.Http.HttpRouteCollection'不包含定义   对于'MapODataRoute'并且没有扩展方法'MapODataRoute'接受   “System.Web.Http.HttpRouteCollection”类型的第一个参数可以   找到(你错过了使用指令或汇编引用吗?)

我相信如果我安装NuGet包,这条消息就会解决(而且安装它没什么大不了的),但是我认为所有OData支持都卷入了'ASP.NET和Web Tools 2012.2更新'因此不需要NuGet包裹?有谁知道为什么MapODataRoute没有解决或我需要哪个参考?

3 个答案:

答案 0 :(得分:2)

来自同一个教程:

  

如果您安装了ASP.NET和Web Tools 2012.2 Update,那么Web API   项目模板自动包含OData包。

因此,检查项目的nuget包,是否存在odata包。

可能是,您安装了新版本的ASP.NET和Web Tools,然后打开旧项目。 我怀疑只有在安装ASP.NET和Web Tools 2012.2更新后创建项目时才需要手动添加odata软件包。

答案 1 :(得分:2)

我必须添加以从nuget安装Microsoft ASP.NET Web API OData。然后确保包含using语句System.Web.Http以使路由正常工作。还要确保将路由添加到WebApiConfig.cs而不是RouteConfig.cs

答案 2 :(得分:2)

对我来说,上述解决方案都没有奏效。

现在不推荐使用MapODataRoute方法。对我来说完美的方式是做以下事情:

var builder = new ODataConventionModelBuilder();
        builder.EntitySet<Supplier>("Suppliers");
        builder.EntitySet<Category>("Categories");
        builder.EntitySet<Product>("Products");            
        config.MapODataServiceRoute(routeName: "odata", routePrefix: "odata", model: builder.GetEdmModel());

请注意不同的MapODataServiceRoute方法。 我希望这会有所帮助。