[英]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.