gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 15:19:19 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

也许这会有所帮助。 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”变量。

关于javascript - SwaggerUI 在向 API 发出请求时生成一个端口号。有什么办法可以阻止这种行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45707849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com