要在Startup.cs中配置以下代码
变量。
private const string SwaggerDocumentVersionName = "v1";
private static string SwaggerDocumentServiceName => $"Users API({SwaggerDocumentVersionName})";
ConfigureServices
方法。
services.AddSwaggerGen(c =>
{
c.SwaggerDoc(
SwaggerDocumentVersionName,
new OpenApiInfo
{
Title = SwaggerDocumentServiceName,
Version = $"{SwaggerDocumentVersionName}"
});
});
Configure
方法。
app.UseSwagger(c =>
{
c.RouteTemplate = "/swagger/{documentName}/swagger.json";
});
app.UseSwaggerUI(c =>
{
c.RoutePrefix = "swagger/ui";
c.SwaggerEndpoint($"/swagger/{SwaggerDocumentVersionName}/swagger.json", SwaggerDocumentServiceName);
});
在本地运行时(https://localhost:5001/swagger/ui
解析为https://localhost:5001/swagger/ui/index.html
),定义已正确加载,并且一切正常。
将服务作为ASP.NET Core REST API部署到AWS Lambda并导航到URL(已解析为https://DNS_URL/API_PREFIX/swagger/ui
的URL(https://DNS_URL/API_PREFIX/swagger/ui/index.html
),这显示了加载JSON定义时出现的以下错误。
有趣的部分是,如果您导航到JSON定义路由(https://DNS_URL/API_PREFIX/swagger/v1/swagger.json
),则会显示该定义。
答案 0 :(得分:1)
您在lambda上发布的API的主要URL是https://DNS_URL/API_PREFIX/
Swagger用户界面需要获取swagger.json文件才能正常工作,而对于您的本地主机,由于https://localhost:5001/swagger/v1/swagger.json
是有效的端点
(*这里没有前缀)
部署到lambda的版本正试图在
下获取此swagger.json
文件
https://DNS_URL/swagger/v1/swagger.json
-没有您的API_PREFIX
,因此返回404(未找到),并且swagger ui正在显示错误消息。
您可能会应用的快速修复,我认为它会起作用:
app.UseSwaggerUI(c =>
{
c.RoutePrefix = "swagger/ui";
c.SwaggerEndpoint($"{env.IsDevelopment() ? "" : API_PREFIX}/swagger/{SwaggerDocumentVersionName}/swagger.json", SwaggerDocumentServiceName);
});
API_PREFIX
是以'/'开头的字符串