Azure API Management Import API始终说:已存在具有指定名称的API

时间:2015-10-27 19:40:37

标签: azure azure-api-management

我正在尝试使用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   已存在

3 个答案:

答案 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 Prefix field

API Management服务实例旨在托管多个API,因此前缀用于通过使用路径的第一部分来区分API。

URL的子域部分用于标识服务。 e.g。

http://{servicename}.azure-api.net{/api-prefix}/path/segment?param=value

更新

基于提供的Swagger,问题来自具有相同OperationId的多个操作对象。这是无效的招摇。

在生成具有重复ID的操作之前,Swashbuckle通常会失败。有一个ResolveConflictingActions方法,允许您放置自己的代码来处理这些情况。在这种情况下,似乎解析代码没有做正确的事情。