JSON 和 UI 端点的 AspNetCore Swagger 返回 404
AspNetCore Swagger for JSON and UI endpoints returning 404
我正在尝试根据 Microsoft Docs here
生成我的 Swagger 文档
使用其他答案here and here在这个问题上没有取得任何进展...
我正在像这样配置 swagger gen:
serviceCollection.AddSwaggerGen(setupAction =>
{
setupAction.SwaggerDoc(
"Open API Specification for Haros v1",
new OpenApiInfo()
{
Title = "Haros API",
Version = "v1",
Description = "Haros API Description",
Contact = new OpenApiContact()
{
Email = "myname@domain",
Name = "My Name"
},
License = new OpenApiLicense()
{
Name = "MIT License"
}
});
setupAction.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Type = SecuritySchemeType.Http,
Scheme = "bearer",
BearerFormat = "JWT",
Description = "Attach your bearer token in this format to consume the API: Bearer {token}",
});
setupAction.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer",
},
}, new List<string>()
},
});
});
然后像这样添加中间件:
app.UseSwagger();
app.UseSwaggerUI(setupAction =>
{
setupAction.SwaggerEndpoint("/swagger/v1/swagger.json", "Haros API v1");
setupAction.RoutePrefix = string.Empty;
});
两个端点(https://localhost:5001/swagger/index.html
和 https://localhost:5001/swagger/v1/swagger.json
)都返回 404。
我已将 GenerateDocumentationFile 的选项添加到我的项目中,并使用 ///
注释装饰了我的 API 控制器端点。
我注意到的是,如果我注释掉 RoutePrefix
,我会设法加载它:
我已经尽可能地关注了 Microsoft 文档 link,我没有看到任何可能遗漏的内容。有人看到我做错了什么或错过了什么吗?
(附加信息:使用 .NET 5 并通过 Kestrel 加载)
你会换成SecuritySchemeType.ApiKey吗?
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1",
new OpenApiInfo
{
Version = "v1",
Title = "My API",
Description = "My API",
Contact = new OpenApiContact
{
Name = "User",
Email = string.Empty,
Url = new Uri("https://github.com"),
}
});
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Description = "Ex: Bearer {token here}",
Name = "Authorization",
Scheme = "Bearer",
BearerFormat = "JWT",
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey,
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference {Type = ReferenceType.SecurityScheme, Id = "Bearer"}
},
new string[] { }
}
});
});
我想出了这个问题,如果你问我的话,这个问题很晦涩。无论如何, 帮助了我,基本上是我的问题。
添加你的SwaggerGen
时,第一个参数name
setupAction.SwaggerDoc(
"Open API Specification for Haros v1", //... etc
)
插入 URL 中间件部分生成的文档:
setupAction.SwaggerEndpoint("/swagger/<from swagger doc name parameter>/swagger.json", "Haros API v1");
如果你这样做:
setupAction.SwaggerDoc(
"v1", //... etc
)
然后这样做:
setupAction.SwaggerEndpoint("/swagger/v1/swagger.json", "Haros API v1");
Swagger 将在两个端点(https://localhost:5001/swagger/index.html
和 https://localhost:5001/swagger/v1/swagger.json
)上成功加载
我正在尝试根据 Microsoft Docs here
生成我的 Swagger 文档使用其他答案here and here在这个问题上没有取得任何进展...
我正在像这样配置 swagger gen:
serviceCollection.AddSwaggerGen(setupAction =>
{
setupAction.SwaggerDoc(
"Open API Specification for Haros v1",
new OpenApiInfo()
{
Title = "Haros API",
Version = "v1",
Description = "Haros API Description",
Contact = new OpenApiContact()
{
Email = "myname@domain",
Name = "My Name"
},
License = new OpenApiLicense()
{
Name = "MIT License"
}
});
setupAction.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Type = SecuritySchemeType.Http,
Scheme = "bearer",
BearerFormat = "JWT",
Description = "Attach your bearer token in this format to consume the API: Bearer {token}",
});
setupAction.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer",
},
}, new List<string>()
},
});
});
然后像这样添加中间件:
app.UseSwagger();
app.UseSwaggerUI(setupAction =>
{
setupAction.SwaggerEndpoint("/swagger/v1/swagger.json", "Haros API v1");
setupAction.RoutePrefix = string.Empty;
});
两个端点(https://localhost:5001/swagger/index.html
和 https://localhost:5001/swagger/v1/swagger.json
)都返回 404。
我已将 GenerateDocumentationFile 的选项添加到我的项目中,并使用 ///
注释装饰了我的 API 控制器端点。
我注意到的是,如果我注释掉 RoutePrefix
,我会设法加载它:
我已经尽可能地关注了 Microsoft 文档 link,我没有看到任何可能遗漏的内容。有人看到我做错了什么或错过了什么吗?
(附加信息:使用 .NET 5 并通过 Kestrel 加载)
你会换成SecuritySchemeType.ApiKey吗?
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1",
new OpenApiInfo
{
Version = "v1",
Title = "My API",
Description = "My API",
Contact = new OpenApiContact
{
Name = "User",
Email = string.Empty,
Url = new Uri("https://github.com"),
}
});
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Description = "Ex: Bearer {token here}",
Name = "Authorization",
Scheme = "Bearer",
BearerFormat = "JWT",
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey,
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference {Type = ReferenceType.SecurityScheme, Id = "Bearer"}
},
new string[] { }
}
});
});
我想出了这个问题,如果你问我的话,这个问题很晦涩。无论如何,
添加你的SwaggerGen
时,第一个参数name
setupAction.SwaggerDoc(
"Open API Specification for Haros v1", //... etc
)
插入 URL 中间件部分生成的文档:
setupAction.SwaggerEndpoint("/swagger/<from swagger doc name parameter>/swagger.json", "Haros API v1");
如果你这样做:
setupAction.SwaggerDoc(
"v1", //... etc
)
然后这样做:
setupAction.SwaggerEndpoint("/swagger/v1/swagger.json", "Haros API v1");
Swagger 将在两个端点(https://localhost:5001/swagger/index.html
和 https://localhost:5001/swagger/v1/swagger.json
)上成功加载