使用Microsoft.Azure.WebJobs.Extensions.OpenApi.Core时Swagger UI无法HTTPS渲染内容
问题原因与解决方案
在1.5.1版本的Microsoft.Azure.WebJobs.Extensions.OpenApi中,你设置ForceHttps=true但本地HTTP访问Swagger仍用HTTP加载的核心原因是:组件默认对本地localhost环境做了特殊处理,会跳过HTTPS强制逻辑,这个设计是为了方便开发者本地调试,避免HTTPS证书配置的麻烦。
解决方案1:本地启用HTTPS访问
如果需要本地Swagger以HTTPS加载内容,直接启用本地函数应用的HTTPS即可:
- 用命令行启动函数:
func start --ssl - 或者在Visual Studio的调试设置中,勾选“启用SSL”选项
- 之后访问
https://localhost:7072/api/swagger/ui(本地HTTPS默认端口为7072),此时Swagger会自动以HTTPS形式加载所有内容。
解决方案2:重写Scheme解析逻辑强制HTTPS
如果需要彻底绕过本地环境的判断,强制所有场景下都用HTTPS生成Swagger链接,可以重写ResolveScheme方法:
public class OpenApiConfigurationOptions : DefaultOpenApiConfigurationOptions { public override bool ForceHttps { get; set; } = true; public override OpenApiInfo Info { get; set; } = new OpenApiInfo() { Version = "1.0.0", Title = "OpenAPI Document ", Description = "An adapter", Contact = new OpenApiContact() { Name = "N/A", Email = "N/A", Url = null, }, License = new OpenApiLicense() { Name = "MIT", Url = new Uri("http://opensource.org/licenses/MIT"), } }; // 重写Scheme解析,强制返回HTTPS public override string ResolveScheme(HttpRequest req) { return "https"; } }
修改后,无论本地还是生产环境,Swagger文档中的所有server URL都会使用HTTPS scheme。
内容的提问来源于stack exchange,提问作者PersianIronwood
相关产品推荐
相关产品推荐

