如何使用NSwag和C#指定“方案”元素?

时间:2018-10-03 16:48:49

标签: c# asp.net-core-webapi nswag

我正在使用ASP.NET Core和NSwag托管并描述通过Windows身份验证在IIS中托管的新Web服务。

我在本地使用https运行Web服务,但是当我部署到测试环境时,Web服务位于具有SSL卸载功能的负载均衡器后面。这意味着即使该站点似乎在浏览器中的SSL下运行,但IIS中的实际绑定是http。因此,我的Swagger UI页面(和swagger.json定义)将支持的方案描述为http。

我想要Swagger.json中的Schemes元素,该元素用于读取“ https”而不是“ http”。谁能帮助我找到需要在代码中设置的属性以手动设置方案?

{
    x-generator: "NSwag v11.19.1.0 (NJsonSchema v9.10.72.0 (Newtonsoft.Json v11.0.0.0))",
    swagger: "2.0",
    info: {
        title: "My API title",
        description: "Provides access to data.",
        version: "1.0.0"
    },
    host: "myhostname.net",
    schemes: [
        "http"
    ],
    etc...
}

1 个答案:

答案 0 :(得分:5)

繁荣。知道了!

最后在Github上找到了答案,下面的代码可以解决问题:

app.UseSwaggerWithApiExplorer(config =>
{
    //...other code omitted...
    config.PostProcess = settings =>
    {
        settings.Schemes.Clear();
        settings.Schemes.Add(NSwag.SwaggerSchema.Https);
    };
});

编辑:

NSwag v12使用:

app.UseSwagger(configure => configure.PostProcess = (document, _) => document.Schemes = new[] { SwaggerSchema.Https });