gpt4 book ai didi

c# - ASP.NET Core 2.1 在 Startup.cs 中获取当前 Web 主机名和端口

转载 作者:可可西里 更新时间:2023-11-01 08:47:03 24 4
gpt4 key购买 nike

我想将我的 WebAPI 注册到 Consul 服务发现,为此我应该提供我的 WebAPI 的 URL(例如:http://service1.com)和健康检查端点(http://service1.com/health/check)。我怎样才能得到那个网址?

我找到了这段代码:

var features = app.Properties["server.Features"] as FeatureCollection;
var addresses = features.Get<IServerAddressesFeature>();
var address = addresses.Addresses.First();
var uri = new Uri(address);

它返回 127.0.0.1:16478 而不是 localhost:5600。我认为第一个被 dotnet.exe 使用,第二个是将 5600 转发到 16478 的 IIS。如何在 Startup.cs 中获取 localhost:5600?

最佳答案

这个问题有多种解决方案。你的地址是这样的:

string myurl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}";

It returns 127.0.0.1:16478 instead of localhost:5600

你没看错。一个来自 IIS,一个来自 dotnet。因此,您在尝试获取正确的 url 时遇到了问题。好的,如果您的服务位于反向代理之后会怎样? https://en.wikipedia.org/wiki/Reverse_proxy

那么您的服务将不会直接暴露在互联网上,但是对特定 url 的请求将从反向代理传递到您的服务。此外,您可以配置反向代理以转发指定原始请求来源的其他 header 。我认为大多数反向代理都使用 X-Forwarded-For(其中一些使用 X-Original-Host 等)。

因此,如果您在 RP 上设置了正确的 header ,那么您可以获得这样的 url:

url = url.RequestContext.HttpContext.Request.Headers["X-Forwarded-For"]

Url 是 UrlHelper 类型。为了简化此方法,您可以创建扩展方法 (GetHostname(this UrlHelper url)),然后在您的 Controller 或任何您想要的地方使用它。希望对你有帮助

关于c# - ASP.NET Core 2.1 在 Startup.cs 中获取当前 Web 主机名和端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52741142/

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