【问题标题】:WebApi Swagger (Swashbuckle) - can't access Swagger UI when connecting through proxyWebApi Swagger (Swashbuckle) - 通过代理连接时无法访问 Swagger UI
【发布时间】:2020-07-24 11:10:41
【问题描述】:

我在我的一个 API 控制器上启用了 swagger (Swashbuckle)。

服务器位于http://192.168.7.119:1001,Swagger UI 通过http://192.168.7.119:1001/swagger 访问。

本地连接时,一切正常,我可以按预期访问端口 1001 上的 Swagger UI。 但是当尝试在端口 1000 上连接代理时(将 1000 重定向到 1001),我得到一个众所周知的错误:

“无法从服务器读取。它可能没有适当的访问控制源设置”。

我已阅读:

Unable to access swagger despite cors enabled Asp.NET WebAPI

并尝试在启动文件中手动设置 RootUrl,在 Swagger 中如下所示:

.EnableSwagger(c => 
         {
             c.RootUrl(req => @"http://192.168.7.119:1001";
             ...
         });

CORS 设置为:

appBuilder.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

任何提示我在这里做错了什么?

【问题讨论】:

  • 你能发布代理配置吗?错误可能在代理端。

标签: c# swagger asp.net-web-api2 swashbuckle


【解决方案1】:

将 Swashbuckle 的 github 存储库中的这两个页面放在一起,完成您所要求的简单方法是:

  • From Github 确保您的代理正在发送 X-Forwarded-* 标头(Apache 开箱即用,而 Nginx 似乎并非如此。您必须对 nginx conf 进行一些更改。
  • From Github。使用 ComputeHostAsSeenByOriginalClient 方法创建这个 HttpRequestMessageExtensions 静态类,然后
.EnableSwagger(c => 
         {
               c.RootUrl(req => req.ComputeHostAsSeenByOriginalClient());
             ...
         });

【讨论】: