繁体   English   中英

使用Web API获取IP地址

[英]Get IP Address with Web API

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

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

由于进行跨域调用,因此必须将Web服务器页面内嵌到客户端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)

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

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

添加到您的Global.asax(这将包括Web Api Controller中的当前会话):

    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的某些类型的项目过于信条。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM