17

試しましたRequest.UserHostAddress;が、APIコントローラーのRequest内にUserHostAddressがありません。

4

3 に答える 3

19
IP = ((HttpContextBase)request.Properties["MS_HttpContext"]).Request.UserHostAddress;
于 2012-09-27T11:37:59.920 に答える
10

私は次のコードを使用しています、そしてそれは私のために働きます....

string ipAddress =   System.Web.HttpContext.Current.Request.UserHostAddress;
于 2013-10-20T04:38:41.660 に答える
8

これによると、より完全な方法は次のようになります。

private string GetClientIp(HttpRequestMessage request)
{
    if (request.Properties.ContainsKey("MS_HttpContext"))
    {
        return ((HttpContext)request.Properties["MS_HttpContext"]).Request.UserHostAddress;
    }
    else if (request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name))
    {
        RemoteEndpointMessageProperty prop;
        prop = (RemoteEndpointMessageProperty)this.Request.Properties[RemoteEndpointMessageProperty.Name];
        return prop.Address;
    }
    else
    {
        return null;
    }
}

以前は、MVC 3プロジェクト(APIではない)では、次のものを使用していました。

string IPAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

if (String.IsNullOrEmpty(IPAddress))
    IPAddress = Request.ServerVariables["REMOTE_ADDR"];
于 2013-05-27T14:53:42.887 に答える