1. ホーム
  2. c#

[解決済み] リモートホストのIPアドレスの取得

2022-05-07 23:04:30

質問

ASP.NETでは System.Web.HttpRequest クラスがあり、その中には ServerVariables プロパティからIPアドレスを取得することができます。 REMOTE_ADDR プロパティの値です。

しかし、ASP.NET Web APIからリモートホストのIPアドレスを取得する同様の方法は見つかりませんでした。

リクエストを行うリモートホストの IP アドレスを取得するにはどうすればよいですか?

解決方法は?

それは可能ですが、あまり発見的ではありません - 着信リクエストからプロパティバッグを使用する必要があり、アクセスする必要があるプロパティは、IIS(webhosted)またはセルフホスティングの下でWeb APIを使用しているかどうかに依存します。以下のコードは、これがどのように行われるかを示しています。

private string GetClientIp(HttpRequestMessage request)
{
    if (request.Properties.ContainsKey("MS_HttpContext"))
    {
        return ((HttpContextWrapper)request.Properties["MS_HttpContext"]).Request.UserHostAddress;
    }

    if (request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name))
    {
        RemoteEndpointMessageProperty prop;
        prop = (RemoteEndpointMessageProperty)request.Properties[RemoteEndpointMessageProperty.Name];
        return prop.Address;
    }

    return null;
}