7

我正在尝试使用 swagger 将我拥有的 API 导入 Azure API 管理,应该相当简单,但我总是遇到同样的错误:

一个或多个字段包含错误值:指定名称的 API 已存在

我还没有在 Azure API 管理中进行任何设置,非常令人沮丧。

更新

我正在使用 Swashbuckle ( https://github.com/domaindrivendev/Swashbuckle ) 将 Swagger 添加到我的 WebAPI 项目中。

它正在生成 Swagger 2.0 文档。

这是 Swagger Doc 的 info 元素:

swagger: "2.0",
info: {
version: "v3",
title: "ShopZioAPIv3"
},

不管我把它改成什么,我仍然总是得到:

一个或多个字段包含错误值:指定名称的 API 已存在

4

3 回答 3

5

我的情况是{"info":{"title": "API-NAME",...Swagger 文件中的标题与所选 API 的名称不匹配(因为我们已经创建了几个测试 API)。

只需更改字符串值即可修复它。

于 2016-05-11T12:37:43.487 回答
4

如果您没有指定唯一的 API 前缀,则会出现该错误消息。

我意识到您说您在 API 中尚未设置任何内容,但是,如果您可以尝试在此字段中添加一些独特的值:

API 前缀字段

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

URL 的子域部分用于标识服务。例如

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

更新

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

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

于 2015-10-28T20:26:09.450 回答
4

Azure API 管理错误“具有指定名称的 API 已存在”可能具有误导性,在这种情况下是不准确的。

正如Darrel Miller 的回答中所讨论的,无效的 Swagger 可能会导致此问题。尽管具有相同 OperationId 的多个操作对象在 Swagger 2.0 中无效,但我认为您遇到的核心问题是Azure API 管理尚不支持 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 。

于 2015-12-01T21:12:40.470 回答