我正在尝试使用swagger将我的API导入Azure API Management,应该相当简单,但我总是得到同样的错误:
一个或多个字段包含不正确的值:具有指定名称的API 已存在
我还没有在Azure API管理中进行任何设置,非常令人沮丧。
更新
我正在使用Swashbuckle(https://github.com/domaindrivendev/Swashbuckle)将Swagger添加到我的WebAPI项目中。
它正在生成Swagger 2.0文档。
这是Swagger Doc的信息元素:
swagger: "2.0",
info: {
version: "v3",
title: "ShopZioAPIv3"
},
我改变它并不重要,我仍然总是得到:
一个或多个字段包含不正确的值:具有指定名称的API 已存在
答案 0 :(得分:4)
Azure API管理错误,"已存在指定名称的API,"可能会产生误导,在这种情况下,它是不准确的。
如Darrel Miller's answer中所述,无效的Swagger可能会导致此问题。虽然Swagger 2.0中具有相同OperationId的多个操作对象无效,但我认为您遇到的核心问题是Azure API Management does not yet support Swagger 2.0(截至2015年12月1日)。
Swashbuckle 5+只生成Swagger 2.0,所以一些(如果不是全部)用它生成的定义都会因为这个错误而失败 - 即使是由http://editor.swagger.io验证的格式良好的Swagger定义,它似乎也只支持Swagger 2.0
Swashbuckle 4.2支持生成Swagger 1.2定义。
此外,我能够使用我的Swagger 2.0定义(由Swashbuckle 5生成),并使用Restlet Studio将其转换为Swagger 1.2。
答案 1 :(得分:4)
我的情况是Swagger文件中的标题{"info":{"title": "API-NAME",...
与所选API的名称不匹配(因为我们创建了几个测试API)。
只需更改字符串值就可以修复它。
答案 2 :(得分:3)
如果未指定唯一的API前缀,则会显示该错误消息。
我知道你说你没有在API中设置过任何东西但是,如果你可以尝试在这个领域中加入一些独特的值:
API Management服务实例旨在托管多个API,因此前缀用于通过使用路径的第一部分来区分API。
URL的子域部分用于标识服务。 e.g。
http://{servicename}.azure-api.net{/api-prefix}/path/segment?param=value
基于提供的Swagger,问题来自具有相同OperationId的多个操作对象。这是无效的招摇。
在生成具有重复ID的操作之前,Swashbuckle通常会失败。有一个ResolveConflictingActions方法,允许您放置自己的代码来处理这些情况。在这种情况下,似乎解析代码没有做正确的事情。