using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.ServiceModel.Channels; using System.Web; using System.Web.Http; namespace iBemsDataService.Controllers { public class ClientAccessController : ApiController { [ActionName("ClientIpAddress")] public ClientInfo GetClientIpAddress() { ClientInfo clientInfo = new ClientInfo(); clientInfo.ip = GetIPAddress(); return clientInfo; } protected string GetIPAddress() { System.Web.HttpContext context = System.Web.HttpContext.Current; string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (!string.IsNullOrEmpty(ipAddress)) { string[] addresses = ipAddress.Split(','); if (addresses.Length != 0) { return addresses[0]; } } return context.Request.ServerVariables["REMOTE_ADDR"]; } private string GetClientIp(HttpRequestMessage request = null) { request = request ?? Request; if (request.Properties.ContainsKey("MS_HttpContext")) { return ((HttpContextWrapper)request.Properties["MS_HttpContext"]).Request.UserHostAddress; } else if (request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name)) { RemoteEndpointMessageProperty prop = (RemoteEndpointMessageProperty)request.Properties[RemoteEndpointMessageProperty.Name]; return prop.Address; } else if (HttpContext.Current != null) { return HttpContext.Current.Request.UserHostAddress; } else { return null; } } public class ClientInfo { public String ip { get; set; } } } }