如何获得.net Core 5.0 API中的服务器IP或主机名



我开发了一个托管在Server上的Angular 8应用程序(即123.234.456.XYZ)。此UI应用程序正在使用。DotNet核心API(我是托管在一个不同的服务器。e 123.234.456.PQR) .

在我的核心API中有一个中间件。它使用下面的代码记录客户端IP。
IPAddress remoteIP = context.Connection.RemoteIpAddress;

是否有任何方法可以在我的中间件中获得应用程序服务器IP(即123.234.456.XYZ) ?

尝试了下面的代码:但是这段代码返回了我的API主机名

IServerVariablesFeature serverVariablesFeature = context.Features.Get<IServerVariablesFeature>();
var hosteName = serverVariablesFeature["REMOTE_HOST"];
Log.Debug($"Request from REMOTE_HOST: {hosteName}");

下面代码返回没有这样的主机是已知的

string HostName= Dns.GetHostEntry(remoteIP).HostName;
Log.Debug($"Request from HostName: {HostName}");

从技术上讲,你的Angular应用运行在用户的浏览器中,所以用户的计算机在从服务器XYZ下载了Angular应用后直接访问API。因此,在默认情况下,没有从应用程序服务器XYZ到API服务器PQR的联系。

您可以在基础设施级别上使用在应用程序服务器上运行的反向代理来解决这个问题,例如在/api下。然后,应用程序不直接访问API,而是使用/API URI连接到应用程序服务器,然后将请求路由到API服务器。如果中间件确实需要额外的数据,您可以在API服务器上的中间件中使用的反向代理中添加标头,以标识应用服务器。

作为一种更简单的自定义方法,你还可以在Angular应用的API请求中添加头文件,这些请求包含Angular应用的源地址(Angular应用运行的URL)。然后,API服务器上的中间件就可以使用这些头信息来识别发送请求的Angular应用实例。

最新更新