部署时ASP.NET Core 3.1 AWS Lambda Swagger定义不起作用

时间:2020-05-13 18:58:34

标签: c# asp.net-core swagger

要在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定义时出现的以下错误。

Swagger JSON Definition Error

有趣的部分是,如果您导航到JSON定义路由(https://DNS_URL/API_PREFIX/swagger/v1/swagger.json),则会显示该定义。

1 个答案:

答案 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是以'/'开头的字符串