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://example.com/swagger/ui/index.html,这会显示“找不到网页”错误
但如果我直接在浏览器网址https://example.com/swagger/ui/index.html中输入,那么它会加载Swagger页面,但是当扩展方法时点击“试一试”,请求网址以“http”开头再次。
此配置仅适用于舞台和制作环境。较低的环境不使用负载均衡器,只使用http。
有关如何阻止https重定向到http的任何想法?以及如何让swagger使用https显示请求网址?
谢谢
编辑: 我正在使用自定义index.html文件
答案 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)
{
...
}