Swagger页面被重定向到https

时间:2016-08-05 14:18:20

标签: asp.net-web-api https swagger swashbuckle

AWS Elastic Load Balancer使用SSL监听HTTPS(443),并通过HTTP(80)将请求重定向到EC2实例,IIS托管.net webapi应用程序,使用swashbuckle描述API方法。

API的主页(https://example.com)有一个指向Swagger文档的链接,当您浏览链接时可以将其读作https://example.com/swagger/ui/index.html

此配置仅适用于舞台和制作环境。较低的环境不使用负载均衡器,只使用http。

有关如何阻止https重定向到http的任何想法?以及如何让swagger使用https显示请求网址?

谢谢

编辑: 我正在使用自定义index.html文件

2 个答案:

答案 0 :(得分:0)

我可能会这样做的方法是拥有一个主文件,并在应用程序构建过程中根据方案和主机的环境参数生成不同的swagger文件。

这样,你必须只管理一个环境中的一个swagger文件,你只需管理一些额外的环境属性,主机和方案(如果你还没有它们)

由于我不知道swashbuckle,我无法回答您的第一个问题(重定向)

答案 1 :(得分:0)

似乎是Swashbuckle的一个已知问题。引用:

默认情况下,服务根URL是从用于访问文档的请求中推断出来的。但是,可能存在无法正确解析的情况(例如代理和负载平衡环境)。您可以解决这可以通过提供您自己的代码来确定根URL。

我所做的是根据环境提供根网址和/或方案

GlobalConfiguration.Configuration
                   .EnableSwagger(c =>
                    {
                       ... 
                       c.RootUrl(req => GetRootUrlFromAppConfig(req));
                       ... 
                       c.Schemes(GetEnvironmentScheme());
                       ...
                    })
                    .EnableSwaggerUi(c =>
                    {
                       ...
                    });

其中

    public static string[] GetEnvironmentScheme()
    {
        ...
    }

    public static string GetRootUrlFromAppConfig(HttpRequestMessage request)
    {
       ...
    }