【问题标题】:How to effectively set the ServerUrl in the NSwag settings?如何在 NSwag 设置中有效设置 ServerUrl?
【发布时间】:2021-09-27 06:27:50
【问题描述】:

我有一个使用 NSwag library 的带有 REST API 和 Swagger 接口的工作 ASP .NET 5 应用程序(所以 不是 Swashbuckle,因为很多人使用)。我已经找到(或者至少我是这么认为的)一种设置服务器 url 的方法。有一个属性可以设置它。这是我的代码:

app.UseSwaggerUi3(settings =>
{
    settings.ServerUrl = "https://XXXXX.YYYYY.com/ZZZZ";
    settings.TransformToExternalPath = (url, request) =>
    {
        // Get the UI to properly find the relative path of the swagger json instead of absolute path.
        string outputUrl;
        if (url.EndsWith(".json") || request.Path.ToString().EndsWith("/")) outputUrl = ".." + url;
        else outputUrl = request.PathBase + "." + url;
        return outputUrl;
    };
});

但是,在运行我的应用程序并使用 swagger 接口时,根本不使用设置的服务器 url...它只是引用相同的主机,因为它没有设置它。我知道可以在需要时更改 swagger 的路由行为(如此处所述,我也使用了this code),但这基本上解决了无法找到 swagger json 的问题。但是,我没有找到有效设置服务器 url 的方法。当我使用本文中显示的代码时,执行请求时的请求url在不使用时引用相同的url。

我该如何解决这个问题?如何有效设置服务器url?这太奇怪了。我看起来该属性根本没有做任何事情。

【问题讨论】:

    标签: asp.net-core .net-core swagger nswag


    【解决方案1】:

    对我来说,使用 PostProcess 中的 Host 属性似乎效果很好。我将其设置为 null 以使 UI 适用于所有传入的主机名。

    我使用的是 Owin 版本,但看起来它也应该在 5/6 中工作。

    RouteTable.Routes.MapOwinPath("swagger", app =>
    {
        ..
        app.UseSwaggerUi3(typeof(Global).Assembly, c => {
            // Fix to make UI work regardless of hostname serving
            c.PostProcess = document => {
                document.Host = null;
            };
        });
    });
    

    ServerUrl 属性看起来仅在最终的 OAuth2 流程中用作 RedirectUrl。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      相关资源
      最近更新 更多