问题描述
我在安装了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
}
我的目标:
- 现在,我需要获取当前使 请求到我的ASP.NET MVC应用程序。所以我想实施 我的自定义控制器MyCustomController中的方法 返回该客户端IP。在这一点上可能吗?如果可以,怎么办?
- 此外,我怎么知道传入的请求是否来自本地IP地址(本地主机)127.0.0.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;
}
}
}
}
,
尝试此属性:
System.Web.HttpContext.Current.Request.UserHostAddress
您可以使用自己实现的ActionFilterAttribute过滤请求