首页 > 解决方案 > HOWTO:从 ASP.NET MVC 中的请求中获取客户端 IP 地址

问题描述

我在安装了 IIS 8.5 的 Web 服务器上部署了一个 ASP.NET MVC 应用程序(使用 .NET 4.5)。

我创建了一个自定义控制器类,我在其中做一些事情,它继承自 System.Web.Mvc.Controller:

public partial class MyCustomController : System.Web.Mvc.Controller
{
    // Here my stuff
}

然后,我的所有控制器(除了少数几个)都从我的自定义控制器继承,例如:

public partial class OneController : MyCustomController
{
   // Here some stuff
}

我的目标:

  1. 现在,我需要获取当前正在向我的 ASP.NET MVC 应用程序发出请求的客户端 IP 地址。所以我想在我的自定义控制器 MyCustomController 中实现一个方法,该方法返回该客户端 IP。在这一点上这可能吗?如果有怎么办?
  2. 此外,我如何知道传入的请求是否来自本地 IP 地址 (localhost) 127.0.0.1,如果是,则丢弃此请求,我的意思是,什么都不做?

标签: c#asp.net-mvcvisual-studio-2013asp.net-4.5

解决方案


您可以使用 HttpRequest.ServerVariables 在 ASP.NET MVC 中获取客户端的 IP 地址。REMOTE_ADDR 变量给出了客户端的 IP 地址。

您可以直接使用以下方法到您的控制器页面并从您的视图或任何您需要的地方调用它

   public string GetIp()  
   {  
      string ip = 
      System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];  
      if (string.IsNullOrEmpty(ip))  
      {  
        ip = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];  
      }  
    return IP;  
   }  

获取 IP 地址的第二种方法是使用 ASP.NET 的内置功能。这里我们使用 Page 类的 Request 属性,它为请求的页面获取一个 HttpRequest 类的对象。HttpRequest 是一个密封类,它使 ASP.NET 能够读取客户端浏览器在 Web 请求期间发送的 HTTP 值。我们访问 HttpRequest 类的 UserHostAddress 属性来获取访问者的 IP 地址。

    private void GetIpAddress(out string userip)  
    {  
      userip = Request.UserHostAddress;  
      if (Request.UserHostAddress != null)  
     {  
       Int64 macinfo = new Int64();  
       string macSrc = macinfo.ToString("X");  
       if (macSrc == "0")  
       {  
        if (userip == "127.0.0.1")  
        {  
            Response.Write("visited Localhost!");  
        }  
        else  
        {  
            lblIPAdd.Text = userip;  
         }     
     }  
  }  
}  

推荐阅读