簡體   English   中英

如何在 .NET Core 5.0 API 中獲取服務器 IP 或主機名

[英]How to get Server IP or HostName in .NET Core 5.0 API

我開發了一個托管在服務器(即 123.234.456.XYZ)上的 Angular 8 應用程序。 此 UI 應用程序正在使用托管在不同服務器(即 123.234.456.PQR)上的 .DotNet Core API。

我的核心 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}");

返回以下代碼No such host is known

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 應用程序的實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM