Gre*_*edy 11 c# consul asp.net-core-2.1
我想将我的WebAPI注册到Consul服务发现中,为此,我应该提供我的WebAPI的URL(例如:http ://service1.com )和运行状况检查端点(http://service1.com/health/check)。如何获得该URL?
我找到了这段代码:
var features = app.Properties["server.Features"] as FeatureCollection;
var addresses = features.Get<IServerAddressesFeature>();
var address = addresses.Addresses.First();
var uri = new Uri(address);
Run Code Online (Sandbox Code Playgroud)
它返回127.0.0.1:16478而不是localhost:5600。我认为第一个由dotnet.exe使用,第二个是IIS,它将5600转发到16478。如何在Startup.cs中获得localhost:5600?
嗯,这个问题有多种解决方案。你的地址是这样的:
string myurl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}";
Run Code Online (Sandbox Code Playgroud)
它返回 127.0.0.1:16478 而不是 localhost:5600
你没看错,是的。一种来自 IIS,一种来自 dotnet。因此,您在尝试获取正确的 url 时遇到了问题。好的,如果您的服务位于反向代理之后会怎样?https://en.wikipedia.org/wiki/Reverse_proxy
那么您的服务将不会直接暴露在互联网上,但对特定 url 的请求将从反向代理传递到您的服务。此外,您可以配置反向代理以转发指定原始请求来自何处的其他标头。我认为大多数反向代理都在使用X-Forwarded-For(其中一些正在使用X-Original-Host等)。
因此,如果您在 RP 上设置了正确的标头,那么您可以获得如下网址:
url = url.RequestContext.HttpContext.Request.Headers["X-Forwarded-For"]
Run Code Online (Sandbox Code Playgroud)
Url 是 UrlHelper 类型。为了简化此方法,您可以创建扩展方法 (GetHostname(this UrlHelper url)),然后在您的控制器或任何您想要的地方使用它。希望能帮助到你
| 归档时间: |
|
| 查看次数: |
1519 次 |
| 最近记录: |