【问题标题】:ASP.Net Core 3.1 Swagger Page Loads via HTTPS but Try It Now uses HTTP and Browser Fails RequestASP.Net Core 3.1 Swagger 页面通过 HTTPS 加载,但现在尝试使用 HTTP 和浏览器失败请求
【发布时间】:2021-02-23 17:43:50
【问题描述】:

我刚刚将我的项目从 Swashbuckle 5.6.3 升级到 6.0.7。我没有进行任何代码更改,但现在在尝试使用 Swagger 页面测试 API 时,Swagger 生成的 URL 未使用 https,即使该页面是通过 https 加载的,并且我能找到的所有文档都说它应该推断基于用于加载 Swagger 页面的 URL 的方案。

这里是配置代码:

        services.AddSwaggerGen(c => {
            c.SwaggerDoc(apiSettings.Version, new OpenApiInfo { Title = apiSettings.Name, Version = apiSettings.Version });

            c.CustomSchemaIds(type => type.FullName);

            c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme {
                Description = "JWT Authorization header using the Bearer scheme.",
                Name        = "Authorization",
                In          = ParameterLocation.Header,
                Type        = SecuritySchemeType.ApiKey,
                Scheme      = "bearer",
                Reference   = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" }
            });

            c.AddSecurityRequirement(new OpenApiSecurityRequirement {
                { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, new List<string>() }
            });
        });

和:

        app.UseSwagger();

        app.UseSwaggerUI(c => {
            c.SwaggerEndpoint($"/swagger/{apiSettings.Version}/swagger.json", $"{apiSettings.Name} {apiSettings.Version}");
        });

现在是否有新的配置设置来指定方案?

【问题讨论】:

    标签: swagger asp.net-core-3.1 swashbuckle.aspnetcore


    【解决方案1】:

    在 6.0.7 版本中,您可以使用 MapSwagger 扩展方法更改此行为。

    app.UseEndpoints(endpoints =>
    {
        ...
        endpoints.MapSwagger($"/swagger/{apiSettings.Version}/swagger.json", o => 
        {
            o.PreSerializeFilters.Add((swagger, httpReq) =>
            {
               swagger.Servers.Clear();
            });
        });
    });
    

    【讨论】:

    • 我还没有机会尝试这个。被其他优先事项淹没。我会尽快解决的。
    • 如果您再次将 NuGet 更新到版本 6.1.0,它可能会像以前一样工作。你可能对 GitHub 上的这个问题感兴趣 github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/2033
    • 谢谢,这看起来正是我遇到的问题。我将在下周更新 nuget 包。
    • 我已经升级到6.1.2,问题依旧。我将尝试此答案中的代码块。
    • 上面的代码不起作用,它会抛出一个 ArgumentException。模式必须包含“{documentName}”参数(参数“模式”)。
    【解决方案2】:

    最后,这是对我有用的最终代码。

            app.UseEndpoints(endpoints => {
                endpoints.MapControllers();
    
                endpoints.MapSwagger("/swagger/{documentName}/swagger.json", options => {
                    options.PreSerializeFilters.Add((swagger, httpRequest) => { });
                });
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 1970-01-01
      • 1970-01-01
      • 2013-03-07
      • 1970-01-01
      • 2010-11-04
      相关资源
      最近更新 更多