我刚开始使用此工具来定义API并在.NET中构建Web API代码。 https://visualstudiogallery.msdn.microsoft.com/cadcb820-762c-4514-9817-884b7558aaa9 我添加了一个RAML合约,它在解决方案中创建了一堆控制器和合同。我还运行了该功能来启用元数据输出。当我转到/ raml页面时,我可以看到API规范很棒。但是,我得到了所有东西的两个版本,我不知道要改变什么以防止它。 例如,在我的.raml文件中,我有一个名为“运算符”的资源。使用这些工具创建一个名为“OperatorsController”的Controller。 .raml定义文件中的baseUri为http://localhost:51366/api/,WebApiConfig.Register函数的MapHttpRoute使用api / {controller} / {id}的routeTemplate设置。在/ raml页面上有/ bookings的条目和/ api / Bookings的条目。第一个似乎来自.raml规范,第二个来自创建的BookingsController。
任何想法如何防止重复。这是我第一次玩api创作,所以我可能会遗漏一些明显的东西......
答案 0 :(得分:1)
元数据(动态生成的raml)捕获所有路由。您的WebApi配置为每个操作/控制器有两个不同的路由。这反映在api控制台(你问题中的图片)。
使用“添加RAML合同...”命令创建的控制器使用属性路由(生成的控制器和操作中的RoutePrefix和Route属性)。
你也有默认路线“api / {controller} / {id}”。
看看WebApiConfig.cs,你会发现:
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
例如,OpertatorsController / Get被这两条不同的路径调用:
/ operators(使用通过属性配置的路由)
/ api / operators(使用“DefaultApi”路由
如果删除“DefaultApi”路由,则每个操作只有一个路由,因此复制将消失。
注意:baseUri根本不用于元数据