我正在使用官方doc逐步方法来配置Swagger UI并在我的ASP.NET Core API应用程序中生成Swagger JSON文件。
Get started with Swashbuckle and ASP.NET Core
如果我查看生成的swagger.json文件-它缺少三个重要属性host
,basePath
和schemes
请帮助我理解我可以添加什么代码,以便生成的swagger.json具有以下提到的属性/值。
这是一个理想的swagger.json-注意如果我遵循应用程序中的文档代码,则会丢失host
,basePath
和schemes
值
{
"swagger": "2.0",
"info": {
"version": "v1",
"title": "Demo API Title"
},
"host": "some-url-that-is-hosted-on-azure.azurewebsites.net",
"basePath": "/api",
"schemes": ["https"],
"paths": {
"/Account/Test": {
"post": {
"tags": [
"Admin"
],
"summary": "Account test method - POST",
"operationId": "AccountTest",
"consumes": [],
"produces": [
"text/plain",
"application/json",
"text/json"
],
"parameters": [],
"responses": {
"200": {
"description": "Success",
"schema": {
"type": "boolean"
}
}
}
}
}
},
"definitions": {
"NumberSearchResult": {
"type": "object",
"properties": {
"number": {
"type": "string"
},
"location": {
"type": "string"
}
}
}
},
"securityDefinitions": {
"Bearer": {
"name": "Authorization",
"in": "header",
"type": "apiKey",
"description": "Authorization. Example: \"Authorization: Bearer {token}\""
}
},
"security": [
{
"Bearer": []
}
]
}
答案 0 :(得分:6)
您可以实现并注册自己的IDocumentFilter
并在那里设置所需的值。
public class MyDocumentFilter : IDocumentFilter
{
public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
{
swaggerDoc.Host = "some-url-that-is-hosted-on-azure.azurewebsites.net";
swaggerDoc.BasePath = "/api";
swaggerDoc.Schemes = new List<string> { "https" };
}
}
然后通过
注册services.AddSwaggerGen(options =>
{
options.DocumentFilter<MyDocumentFilter>();
});
答案 1 :(得分:3)
Swagger / open api 3.0及更高版本需要服务器对象。看到: Verifying Googlebot
要在启动时像这样设置
app.UseSwagger(c =>
{
c.PreSerializeFilters.Add((swagger, httpReq) =>
{
swagger.Servers = new List<OpenApiServer> { new OpenApiServer { Url = $"{httpReq.Scheme}://{httpReq.Host.Value}" } };
});
});
答案 2 :(得分:1)
.netcore的最新版本的Swashbuckle有一些更改
如果您希望在Swashbuckle中更改请求URL,则可能是您位于API网关后面,或将自定义域附加到了Webapp。做这个。
public class BasePathDocumentFilter : IDocumentFilter { public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context) { swaggerDoc.Servers = new List<OpenApiServer>() { new OpenApiServer() { Url = "hxxt://yoursite" } }; } }
services.AddSwaggerGen()
方法中添加像这样的文档过滤器c.DocumentFilter<BasePathDocumentFilter>();
答案 3 :(得分:1)
我正在使用Swashbuckle.AspNetCore Nuget版本4.0.1
我需要根据托管应用程序的位置动态添加主机。
这是我的解决方法
答案 4 :(得分:0)
因此在.net core 3和Open Api中-Nswag.AspNetCore版本13.3.2 nuget。
app.UseOpenApi( configure => {
configure.PostProcess = (doc, httpReq) =>
{
doc.Servers.Clear(); //... remove local host, added via asp .net core
doc.Servers.Add(new OpenApiServer { Url = "[YOUR SERVER URL]" }); //... add server
};
});
从以下github答案中提取:https://github.com/RicoSuter/NSwag/issues/2441#issuecomment-583721522