使用 Web API 获取 IP 地址

本文关键字:IP 地址 获取 API Web 使用 | 更新日期: 2023-09-27 18:31:03

我目前正在使用MVC4 Web API,对于其中一个调用,我需要获取客户端的IP地址。这是我的设置...

客户端计算机无法访问互联网,只能访问我们的内部网

由于我正在进行跨域调用,因此我必须将Web服务器页面iframe到客户端HTML页面中并发布消息。

一旦 Web 服务器收到消息,它就会对 RESTful 服务进行 ajax 调用,C# 从那里获取它。

所以我目前的目标是获取客户端计算机的 IP 地址。经过一番研究,我发现这个...

private string GetClientIp(HttpRequestMessage request)
{
    if (request.Properties.ContainsKey("MS_HttpContext"))
    {
      return ((HttpContextWrapper)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;
   }

现在我意识到我不是最聪明的人,但是我会为HTTPRequestMessage请求的参数传递什么?

private string GetClientIp(HttpRequestMessage request)

有没有这方面的例子?这可能吗?还是我应该采取另一种方法

使用 Web API 获取 IP 地址

请原谅 VB.NET 但您也可以这样做:

添加到您的 Global.asax(这将包括您的 Web API 控制器中的当前会话):

    Private Shared Function IsWebApiRequest() As Boolean
        Return HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath.StartsWith("~/api")
    End Function
 Protected Sub Application_PostAuthorizeRequest()
        If IsWebApiRequest() Then
            HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required)
        End If
    End Sub

然后在 Web API 控制器中:

Public Shared Function GetIPAddress() As String
    Dim context As System.Web.HttpContext =
        System.Web.HttpContext.Current
    Dim sIPAddress As String =
        context.Request.ServerVariables("HTTP_X_FORWARDED_FOR")
    If String.IsNullOrEmpty(sIPAddress) Then
        Return context.Request.ServerVariables("REMOTE_ADDR")
    Else
        Dim ipArray As String() = sIPAddress.Split(
            New [Char]() {","c})
        Return ipArray(0)
    End If
End Function

你会用这个打破 RESTful 设计,但这完全是关于什么有效,在我看来,人们对 REST 在某些类型的项目方面过于教条。