当前位置: 首页 > 知识库问答 >
问题:

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

魏宏邈
2023-03-14

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

然而,每当我试图测试任何应用编程接口endpoint时,斯瓦格都会在请求网址中在主机后添加一个端口号: port,这阻止了与应用编程接口endpoint的连接,因此没有数据返回。出于某种原因,在枢轴上托管的应用编程接口对端口号不满意;相反,路由网址似乎工作正常。

我托管一个ASP. NET Web API,并使用SwashBuckle Swagger Nuget包生成留档。

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

共有2个答案

叶文博
2023-03-14

也许这会有帮助。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”变量的header成员。

江同化
2023-03-14

我知道这是一个相当晚的答复,但我补充它,以便其他人谁遇到这个希望在未来能很快找到一个解决方案。

我遇到了同样的问题。我在SwashBuckle Git回购上发现了这个留档:

默认情况下,服务根url是根据用于访问文档的请求推断出来的。但是,在某些情况下(例如代理和负载平衡环境),这可能无法正确解决。您可以通过提供自己的代码来确定根URL来解决这个问题。

在您的App_Start/SwaggerConfig.cs文件中,您需要取消对c. RootUrl(req=

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

 类似资料:
  • 问题内容: 我已经构建了一种通过$ http返回资源的复杂方法。 该方法返回一个Promise,然后检查资源是否存在我的本地缓存。如果这样做,它将返回缓存的资源,否则,将发出$ http请求。在资源被缓存后,这种方法效果很好,但是在整个应用程序中,我有多种功能正在按此方法加载,并且每个函数都会发出http请求,因为资源尚未返回和缓存。 我想出了一个简单的检查方法来解决此问题,但我觉得应该有一个更好

  • 问题内容: 这个想法是在某些情况下从另一个来源获取数据,所以我有这个存根: 失败了 [$ injector:cdep]找到循环依赖项:拦截器<-$ http 还尝试注入$ injector并使用它获取$ http,结果相同。有任何想法吗? .config就是声明: 问题答案: 注入到: 用它来获取回调函数中返回的对象。 这是一个例子

  • 我有一个枚举类来存储一些像这样的分类值。 每种类型都有pydantic模型。例如: 我有这样的字典: 我有一个FastAPI路由,用户需要输入字段类型名称作为字符串(从FastAPI文档中的下拉列表),并根据选择的类型提供类型属性。如果用户选择type=“images”,则会提供相应的pydantic模型“ImageModel”供用户填写,以此类推。 选择类型名称后,有没有办法产生对应的pydan

  • 我使用的界面看起来大致如下: 并且我目前正在使用一个匿名类来实现接口,但我并不关心这两种方法中的一种。大致如下: 现在,我已经在Java8中尽可能地使用新的lambda表达式,我想在这种情况下使用增加的简单性。毕竟,我只是在实现其中的一个方法,但由于接口中有两个方法,所以我不能在一个lambda表达式中使用它。

  • 有没有什么前端库,可以生成一个接口用各种语言发起请求的代码,我想实现类似下面这种功能,但是不想重复编写这些模版代码:

  • 问题内容: 我想知道是否有可能以编程方式发现特定API的所有端点。 因此,例如,如果我使用浏览器或curl获取此URL:https : //api.twitter.com/1.1/ 我可能会收到类似以下内容的JSON响应: 当然,Twitter可以选择发布还是不发布这种格式。因此,作为一个附带问题,是否有任何Java或Java库可以自动映射和发布您在控制器中创建的API路由? 问题答案: 由于没有