Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过MVC 5控制器在Azure中获取客户端IP_C#_Azure_Asp.net Mvc 5_Azure Web App Service - Fatal编程技术网

C# 通过MVC 5控制器在Azure中获取客户端IP

C# 通过MVC 5控制器在Azure中获取客户端IP,c#,azure,asp.net-mvc-5,azure-web-app-service,C#,Azure,Asp.net Mvc 5,Azure Web App Service,我找不到针对Azure的问题或帖子,我也不确定Azure中的环境与我的测试环境有什么不同,这会导致这种情况。 我已经尝试了一些方法来让这个工作,但我来的不对。请注意,这个不是Webapi,所以据我所知,使用HttpRequestMessage也不会起作用 以下是我迄今为止所尝试的: 方法1: string ipAddress = ""; IPHostEntry Host = default(IPHostEntry); Host = Dns.GetHostEntry(System.Environm

我找不到针对Azure的问题或帖子,我也不确定Azure中的环境与我的测试环境有什么不同,这会导致这种情况。 我已经尝试了一些方法来让这个工作,但我来的不对。请注意,这个不是Webapi,所以据我所知,使用HttpRequestMessage也不会起作用

以下是我迄今为止所尝试的:

方法1:

string ipAddress = "";
IPHostEntry Host = default(IPHostEntry);
Host = Dns.GetHostEntry(System.Environment.MachineName);
ipAddress = Host.AddressList.SingleOrDefault(x => x.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork).MapToIPv4().ToString();
string userIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(userIP))
{
    userIP = Request.ServerVariables["REMOTE_ADDR"];
}
return userIP;
方法2:

string ipAddress = "";
IPHostEntry Host = default(IPHostEntry);
Host = Dns.GetHostEntry(System.Environment.MachineName);
ipAddress = Host.AddressList.SingleOrDefault(x => x.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork).MapToIPv4().ToString();
string userIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(userIP))
{
    userIP = Request.ServerVariables["REMOTE_ADDR"];
}
return userIP;

提前感谢。

阅读此标题中传输的值:

x-forwarded-for: "91.23.44.24:52623"
注意,IP地址后面有一个源端口号,因此需要进行相应的解析

另外,正如正确指出的那样,请求所遍历的有问题的报头。例如:

x-forwarded-for: "91.23.44.24:52623, 91.23.44.155"
语法
X-Forwarded-For:,
客户端IP地址

如果请求通过多个代理,则会列出每个后续代理的IP地址。这意味着,最右边的IP地址是最新代理的IP地址,最左边的IP地址是发起客户端的IP地址

你问的那个引人注目的端口号呢

发件人:

5.2. 转发给 […]此参数可能包含IP地址 地址(以及,可能的端口号)

所有客户端请求都在前端层终止,并通过应用程序请求路由代理到您的web worker(托管MVC5应用程序)


谢谢。有没有一种方法可以不同于我在上面的例子中尝试的方法?我有没有做错什么?您的web工作人员的环境没有可用的客户端IP信息,因此传统的
请求.ServerVariables
在应用程序服务中不起作用。你没有做错什么,只是不适用于这里。也有这种方法——但我不确定如何将其转换为完整的ASP.NET框架。你自己检查头应该更快,因为你没有实例化任何额外的东西。谢谢,我接受了这一点,因为正如你所说的,端口号包括在内,需要删除,以使其余的代码正常工作-这在测试人员使用头方法时没有考虑到。不幸的是,我认为他们没有看到输出。请注意,如果请求由代理服务器链接,那么x-forwarded-for可能包含多个IP地址:x-forwarded-for:。看见