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