1

我刚刚开始使用这个工具来定义一个 API 并在 .NET 中搭建 Web API 代码。https://visualstudiogallery.msdn.microsoft.com/cadcb820-762c-4514-9817-884b7558aaa9 我添加了一个 RAML 合约,它在解决方案中创建了一堆控制器和合约。我还运行了启用元数据输出的功能。当我转到 /raml 页面时,我可以看到很棒的 AP​​I 规范。但是,我得到了所有东西的两个版本,我不确定要改变什么来防止它。例如,在我的 .raml 文件中,我有一个名为“operators”的资源。使用这些工具创建一个名为“OperatorsController”的控制器。.raml 定义文件中的 baseUri 为http://localhost:51366/api/WebApiConfig.Register 函数的 MapHttpRoute 设置了 api/{controller}/{id} 的 routeTemplate。在 /raml 页面上有一个 /bookings 条目和一个 /api/Bookings 条目。第一个似乎来自 .raml 规范,第二个来自创建的 BookingsController。 在此处输入图像描述

知道如何防止重复。这是我第一次玩 api 创建,所以我可能在这里遗漏了一些明显的东西......

4

1 回答 1

1

元数据(动态生成的 raml)捕获您的所有路线。您的 WebApi 以这样一种方式配置,即每个操作/控制器都有两条不同的路由。这反映在 api 控制台(您问题中的图片)中。

您使用“Add RAML Contract...”命令创建的控制器使用属性路由(生成的控制器和操作中的 RoutePrefix 和 Route 属性)。

而且您还有默认路由“api/{controller}/{id}”。

看看 WebApiConfig.cs,你会发现:

config.MapHttpAttributeRoutes();

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

例如,OperatorsController / Get 被这两个不同的路由调用:

/operators(使用通过属性配置的路由)

/api/operators(使用“DefaultApi”路由

如果您删除“DefaultApi”路由,每个操作将只有一个路由,因此重复将消失。

注意:baseUri 根本不用于元数据

于 2015-12-11T17:40:46.797 回答