c# - Asp Net Web API 2.1 获取客户端IP地址

标签 c# asp.net asp.net-web-api

你好,我需要获取在 web api 中请求某种方法的客户端 IP, 我尝试使用来自 here 的代码但它总是返回服务器本地 IP, 如何以正确的方式进入?

HttpContext.Current.Request.UserHostAddress;

来自其他问题:

public static class HttpRequestMessageExtensions
    {
        private const string HttpContext = "MS_HttpContext";
        private const string RemoteEndpointMessage = "System.ServiceModel.Channels.RemoteEndpointMessageProperty";

        public static string GetClientIpAddress(this HttpRequestMessage request)
        {
            if (request.Properties.ContainsKey(HttpContext))
            {
                dynamic ctx = request.Properties[HttpContext];
                if (ctx != null)
                {
                    return ctx.Request.UserHostAddress;
                }
            }

            if (request.Properties.ContainsKey(RemoteEndpointMessage))
            {
                dynamic remoteEndpoint = request.Properties[RemoteEndpointMessage];
                if (remoteEndpoint != null)
                {
                    return remoteEndpoint.Address;
                }
            }

            return null;
        }
    }

最佳答案

以下链接可能对您有所帮助。这是来自以下链接的代码。

引用:getting-the-client-ip-via-asp-net-web-api

using System.Net.Http;
using System.ServiceModel.Channels;
using System.Web;
using System.Web.Http;


namespace Trikks.Controllers.Api
{
    public class IpController : ApiController
    {
          public string GetIp()
          {
                return GetClientIp();
          }

          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;
                }
           }
     }
}

下面是另一种方法。

引用:how-to-access-the-client-s-ip-address

对于网络托管版本

string clientAddress = HttpContext.Current.Request.UserHostAddress;

自托管

object property;
        Request.Properties.TryGetValue(typeof(RemoteEndpointMessageProperty).FullName, out property);
        RemoteEndpointMessageProperty remoteProperty = property as RemoteEndpointMessageProperty;

关于c# - Asp Net Web API 2.1 获取客户端IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22532806/

相关文章:

c# - .NET 单元测试 - 带有 MVC 的 Moq/xUnit 框架,未返回预期结果

ASP.net使用表单将数据插入到sql server表中

asp.net - 跟踪 ASP.NET 网页的缓慢性能

c# - WebApi 2 不使用域模型 Dbcontext 连接字符串

c# - SignalR 和类型化对象

c# - WebApi 2 中 IHostBufferPolicySelector 上下文中的空 RouteData

c# - 试图在 unity3d 中将游戏对象保持在屏幕左右边界内

c# - app.config修改值c#

c# - client_id 在 ValidateClientAuthentication 中始终为 null

c# - 如何确保线程安全的 ASP.net 页面访问静态对象列表