Swashbuckle.AspNetCore与AutoRest适配及Swagger缺失servers问题求助
解决AutoRest生成客户端时的"no servers entry"错误
我来帮你搞定这个问题——你碰到的报错核心原因是AutoRest v3要求Swagger/OpenAPI 3.0文档里必须包含servers字段,而你的Swashbuckle.AspNetCore生成的文档正好缺了这个信息。下面分两种方案解决,还有版本兼容的说明:
方案1:让Swashbuckle输出包含servers信息的Swagger JSON
这是最规范的做法,完全符合OpenAPI 3.0的标准。针对你用的Swashbuckle.AspNetCore 5.2.1,只需要在Swagger配置里添加Server定义就行:
如果是.NET Core 3.1/5(Startup.cs)
services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" }); // 添加上你的API服务器地址 c.AddServer(new OpenApiServer { Url = "http://myswagger.api.local", Description = "本地开发服务器" }); });
如果是.NET 6+(Program.cs)
builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" }); c.AddServer(new OpenApiServer { Url = "http://myswagger.api.local", Description = "本地开发服务器" }); });
重新启动API站点后,你再访问http://myswagger.api.local/swagger/v1/swagger.json,就能看到根节点下多了servers数组字段,AutoRest就不会再报错了。
方案2:用AutoRest命令参数绕过检查(临时应急)
如果你不想修改API的Swagger配置,可以直接在AutoRest命令里加上--base-url参数,手动指定API的基础地址:
autorest --input-file=http://myswagger.api.local/swagger/v1/swagger.json --powershell --output-folder=CSharp_MySwagger --namespace=MySwaggerNamespace --v3 --base-url=http://myswagger.api.local
这个参数会让AutoRest忽略文档里的servers缺失,直接使用你指定的地址生成客户端。
版本兼容说明
你当前用的版本组合是可以兼容的:
- Swashbuckle.AspNetCore 5.2.1:完全支持生成OpenAPI 3.0规范的文档,符合AutoRest v3的要求
- AutoRest 3.0.6187 + @autorest/powershell 2.1.x:两者搭配稳定,只要文档符合OpenAPI 3.0规范就没问题
如果后续还是碰到插件版本的问题,可以在命令里指定具体的插件版本,比如:
autorest --input-file=http://myswagger.api.local/swagger/v1/swagger.json --powershell --output-folder=CSharp_MySwagger --namespace=MySwaggerNamespace --v3 --use=@autorest/powershell@2.1.327
内容的提问来源于stack exchange,提问作者user849202
相关产品推荐
相关产品推荐

