Javascript SwaggerUI在向API发出请求时生成端口号。有没有办法阻止这种行为?

Javascript SwaggerUI在向API发出请求时生成端口号。有没有办法阻止这种行为?,javascript,swagger-ui,cloud-foundry,Javascript,Swagger Ui,Cloud Foundry,我有一个在Pivotal Cloud foundry上托管的Web API;其中包括它的招摇过市文档 但是,每当我尝试测试任何API端点时,Swagger都会在请求URL中输入一个端口号:主机后的port,这会阻止连接到API端点,因此不会返回任何数据。出于某些原因,pivotal上承载的API不适合使用端口号;取而代之的是,仅仅路由url似乎可以正常工作 我正在托管一个ASP.NETWebAPI,并使用Swashback-Swagger-Nuget包生成文档 有没有办法强迫Swagger在发送

我有一个在Pivotal Cloud foundry上托管的Web API;其中包括它的招摇过市文档

但是,每当我尝试测试任何API端点时,Swagger都会在请求URL中输入一个端口号:主机后的port,这会阻止连接到API端点,因此不会返回任何数据。出于某些原因,pivotal上承载的API不适合使用端口号;取而代之的是,仅仅路由url似乎可以正常工作

我正在托管一个ASP.NETWebAPI,并使用Swashback-Swagger-Nuget包生成文档


有没有办法强迫Swagger在发送api请求时删除端口号?

我知道这是一个相当晚的回复,但我正在添加它,以便将来遇到此问题的其他人能够快速找到解决方案

我遇到了完全相同的问题。我在虚张声势的Git回购协议上找到了以下文档:

默认情况下,服务根url是从用于 访问文档。但是,可能存在以下情况(例如代理和 负载平衡环境)中,此问题无法正确解决。你 您可以通过提供自己的代码来确定根目录来解决此问题 网址

App\u Start/SwaggerConfig.cs
文件中,您需要取消注释
c.RootUrl(req=>GetRootUrlFromAppConfig())
的行,并实现方法
GetRootUrlFromAppConfig()
,以便它为您的应用程序返回正确的根url(请参见下面的屏幕截图)


下面是一些实现
GetRootUrlFromAppConfig()
的示例,您需要确定哪一个最适合您的具体情况:

可能会有帮助。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
,并查看要用于“authority”变量的头成员。

我想指出,如果需要获取请求Uri(例如,您希望将其传递到我在这里所做的方法中)使用req.RequestUrl如下:c.RootUrl(req=>YourCustomMethodToGetTheBaseUrl(req.RequestUri))