使用 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)
有没有这方面的例子?这可能吗?还是我应该采取另一种方法
请原谅 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 在某些类型的项目方面过于教条。