4

我有一个托管在 Azure 中的 WebAPI 项目,它为移动应用程序提供 JSON Web 服务。我现在想添加一个 OData 服务来为业务用户提供数据。在一个 Web 角色中托管两个单独的 WebAPI 项目看起来很困难,所以我试图让这两个服务在一个项目中运行。

我遇到的问题是两者都使用相同的模型类,因此它们都期望相同的控制器类名称,例如 ProductsController。如果我尝试将控制器放入不同的命名空间中,则会出现错误:

Multiple types were found that match the controller named 'Products'.
This can happen if the route that services this request ('odata/{*odataPath}')
found multiple controllers defined with the same name but differing namespaces,
which is not supported. The request for 'Products' has found the following
matching controllers: 
MyProj.Controllers.OData.ProductsController
MyProj.Controllers.ProductsController

由于我无法在 MapODataRoute 中指定命名空间,我无法消除这两个控制器的歧义。任何人都可以提出解决方案吗?

更新 1

关于配置的一些细节。OData 配置为:

        config.EnableQuerySupport();

        ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
        modelBuilder.EntitySet<Product>("Products");

        Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel();
        config.Routes.MapODataRoute("ODataRoute", "odata", model);

WebAPI RouteConfig 是:

    routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
4

1 回答 1

1

不幸的是,WebAPI 不支持“开箱即用”的领域,例如 MVC。您需要更换DefaultHttpControllerSelector. 详细信息在链接中。

此外,您可以尝试 AttributeRouting.WebApi nuget 包(http://attributerouting.net)。此功能已包含在 WebAPI 路线图中。

于 2013-04-26T13:07:17.850 回答