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

C# 使用用于.NET扩展的RAML工具防止RAML文档的重复条目,c#,api,raml,C#,Api,Raml,我刚刚开始使用这个工具来定义API,并在.NET中构建Web API代码。 我添加了一个RAML契约,它在解决方案中创建了一组控制器和契约。我还运行了该函数以启用元数据输出。当我转到/raml页面时,我可以看到非常棒的API规范。然而,我得到了两个版本的东西,我不确定要改变什么来防止它。 例如,在我的.raml文件中,我有一个名为“operators”的资源。使用这些工具可以创建一个名为“OperatorController”的控制器。.raml定义文件中的baseUri为,WebApiConf

我刚刚开始使用这个工具来定义API,并在.NET中构建Web API代码。 我添加了一个RAML契约,它在解决方案中创建了一组控制器和契约。我还运行了该函数以启用元数据输出。当我转到/raml页面时,我可以看到非常棒的API规范。然而,我得到了两个版本的东西,我不确定要改变什么来防止它。 例如,在我的.raml文件中,我有一个名为“operators”的资源。使用这些工具可以创建一个名为“OperatorController”的控制器。.raml定义文件中的baseUri为,WebApiConfig.Register函数的MapHttpRoute使用api/{controller}/{id}的routeTemplate设置。在/raml页面上有一个/bookings条目和一个/api/bookings条目。第一个似乎来自.raml规范,第二个来自创建的BookingsController。

你知道如何防止重复吗?这是我第一次尝试api创建,所以我可能错过了一些明显的东西…

元数据(动态生成的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被这两个不同的路由调用:

/操作员(使用通过属性配置的路由)

/api/操作员(使用“DefaultApi”路线

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


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

我看不到任何明显的配置参数可以控制这一点:因此您可以尝试在这里报告问题:并看看维护人员要说什么。非常感谢@Pedro。我对这两种路由的了解不够。我将把属性routing更改为我的api con使它们与routeTemplate相似(否则它们将与我的MVC路线冲突),并按照您的建议删除MappHttpRoute。