【问题标题】:HOWTO: Get client IP address from request in ASP.NET MVC如何:从 ASP.NET MVC 中的请求中获取客户端 IP 地址
【发布时间】:2020-11-06 22:44:42
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

您可以使用 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;  
         }     
     }  
  }  
}  

【讨论】:

  • 如果是 IPv6 IP 地址,userip 是否等于 "::1"?所以条件是 userip == "127.0.0.1" || userip == "::1" 还有一些预定义的 .Net 函数可以传递一个字符串 IP,它表示它是否是本地的?
  • 是的,你可以像这样使用 (userip == "127.0.0.1" || userip == "::1" ),直到今天我还没有找到预定义的 .Net 函数
【解决方案2】:

试试这个属性:

System.Web.HttpContext.Current.Request.UserHostAddress

您可以使用自己实现的ActionFilterAttribute 来过滤请求

【讨论】:

    猜你喜欢
    • 2011-02-04
    • 1970-01-01
    • 2020-03-17
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 2015-04-24
    相关资源
    最近更新 更多