使用用于.NET扩展的RAML工具防止RAML文档的重复条目

时间:2015-12-11 03:34:52

标签: c# api raml

我刚开始使用此工具来定义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。 enter image description here

任何想法如何防止重复。这是我第一次玩api创作,所以我可能会遗漏一些明显的东西......

1 个答案:

答案 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根本不用于元数据