SwaggerUI 在向 API 发出请求时生成一个端口号。有什么办法可以阻止这种行为吗?

SwaggerUI generates a port number when making the request to the API. Is there any way to stop this behaviour?

我有一个 Web API 托管在 Pivotal Cloud foundry 上;其中包括它的 Swagger 文档。

但是,每当我尝试测试任何 API 端点时,Swagger 都会在请求 URL 主机后添加一个端口号 :port,并且这会阻止与 API 端点建立连接,因此不会返回任何数据。出于某种原因,托管在 pivotal 上的 APIs 对端口号不满意;而只是路线 url 似乎工作正常。

我正在托管 ASP.NET Web API 并使用 Swashbuckle Swagger Nuget 包生成文档。

有什么办法可以强制Swagger在发送api请求时去掉端口号吗?

我知道这是一个相当晚的回复,但我添加它是为了让将来 运行 参与其中的其他人能够快速找到解决方案。

我 运行 遇到了这个完全相同的问题。我在 Swashbuckle Git repo:

上找到了这个文档

By default, the service root url is inferred from the request used to access the docs. However, there may be situations (e.g. proxy and load-balanced environments) where this does not resolve correctly. You can workaround this by providing your own code to determine the root URL.

在您的 App_Start/SwaggerConfig.cs 文件中,您需要取消注释 c.RootUrl(req => GetRootUrlFromAppConfig()) 的行并实施方法 GetRootUrlFromAppConfig() 以便它 returns 正确的根 url 为您的应用程序(见下面的屏幕截图)

下面是 GetRootUrlFromAppConfig() 的一些实施示例,您需要确定哪一个最适合您的具体情况:https://github.com/domaindrivendev/Swashbuckle/issues/705

也许这会有所帮助。 mknopf 的答案是正确的。由于声誉点的限制,我无法投票。但是,我在这里起草我的代码,供其他人在遇到此问题时快速解决。

在 SwaggerConfig.cs 文件中(仅当您从源文件而不是配置文件本身设置配置时)更新 RoolUrl 语句如下:

c.RootUrl(req => ComputeHostAsSeenByOriginalClient(req));

然后在您的 swaggerconfig.cs 文件中添加以下方法:

private static string ComputeHostAsSeenByOriginalClient(HttpRequestMessage req)
{
   var authority = req.Headers.Host;
   var scheme = req.RequestUri.Scheme;
   if (req.Headers.Contains("X-Forwarded-Host"))
   {
       var xForwardedHost = req.Headers.GetValues("X-Forwarded-Host").First();
       var firstForwardedHost = xForwardedHost.Split(',')[0];
       authority = firstForwardedHost;
   }
   if (req.Headers.Contains("X-Forwarded-Proto"))
   {
       var xForwardedProto = req.Headers.GetValues("X-Forwarded-Proto").First();
       if (xForwardedProto.IndexOf(",") != -1)
       {
          //when multiple apache, X-Forwarded-Proto is also multiple ...
          xForwardedProto = xForwardedProto.Split(',')[0];
       }
       scheme = xForwardedProto;
   }
   return scheme + "://" + authority;
}

如果根 url 仍然存在问题,我建议通过记录值来调试 req.Headers 并查看哪个 header 成员用于 "authority"变量。