C# 使用Web API获取IP地址
我目前正在使用MVC4WebAPI,对于其中一个调用,我需要获取客户端的IP地址。这是我的设置 客户端计算机无法访问internet,只能访问我们的内部网 因为我在进行跨域调用,所以我必须将web服务器页面框架化为客户端HTML页面并发布消息 一旦web服务器接收到消息,它就对RESTful服务进行ajax调用,C#从那里获取消息 因此,我当前的目标是获取客户机的IP地址。经过一些研究,我发现这个C# 使用Web API获取IP地址,c#,javascript,rest,asp.net-mvc-4,asp.net-web-api,C#,Javascript,Rest,Asp.net Mvc 4,Asp.net Web Api,我目前正在使用MVC4WebAPI,对于其中一个调用,我需要获取客户端的IP地址。这是我的设置 客户端计算机无法访问internet,只能访问我们的内部网 因为我在进行跨域调用,所以我必须将web服务器页面框架化为客户端HTML页面并发布消息 一旦web服务器接收到消息,它就对RESTful服务进行ajax调用,C#从那里获取消息 因此,我当前的目标是获取客户机的IP地址。经过一些研究,我发现这个 private string GetClientIp(HttpRequestMessage req
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控制器中的当前会话): 然后在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
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过于教条。一般来说,如果一个方法需要类型为
HttpRequestMessage
的参数,那么您就声明并传递它。签出此问题: