如何在ASP.NET MVC中获取客户端的IP地址?

我是ASP.NET MVC堆栈的新手,我想知道简单的Page对象和Request ServerVariables对象发生了什么?

基本上,我想拉出客户端PC的IP地址,但是我无法理解当前的MVC结构如何改变了所有这些。

据我了解,大多数变量对象已被HttpRequest变体替换。

有人愿意分享一些资源吗?在ASP.NET MVC世界中确实有很多东西可以学习。:)

例如,我有一个带有当前函数的静态类。使用ASP.NET MVC如何获得相同的结果?

public static int getCountry(Page page)

{

return getCountryFromIP(getIPAddress(page));

}

public static string getIPAddress(Page page)

{

string szRemoteAddr = page.Request.ServerVariables["REMOTE_ADDR"];

string szXForwardedFor = page.Request.ServerVariables["X_FORWARDED_FOR"];

string szIP = "";

if (szXForwardedFor == null)

{

szIP = szRemoteAddr;

}

else

{

szIP = szXForwardedFor;

if (szIP.IndexOf(",") > 0)

{

string [] arIPs = szIP.Split(',');

foreach (string item in arIPs)

{

if (!isPrivateIP(item))

{

return item;

}

}

}

}

return szIP;

}

以及如何从控制器页面调用此函数?

回答:

简单的答案是使用HttpRequest.UserHostAddress属性。

从控制器内部:

using System;

using System.Web.Mvc;

namespace Mvc.Controllers

{

public class HomeController : ClientController

{

public ActionResult Index()

{

string ip = Request.UserHostAddress;

...

}

}

}

在帮助器类中:

using System.Web;

namespace Mvc.Helpers

{

public static class HelperClass

{

public static string GetIPHelper()

{

string ip = HttpContext.Current.Request.UserHostAddress;

..

}

}

}

如果请求已被一个或多个代理服务器传递,则HttpRequest.UserHostAddress属性返回的IP地址将是中继该请求的最后一个代理服务器的IP地址。

代理服务器 使用 事实上的 标准,将客户的IP地址放在X-Forwarded-

For HTTP标头中。除了不能保证请求具有X-

Forwarded-For标头之外,也不能保证X-Forwarded-For没有被


Request.UserHostAddress

The above code provides the Client’s IP address without resorting to looking

up a collection. The Request property is available within Controllers (or

Views). Therefore instead of passing a Page class to your function you can

pass a Request object to get the same result:

public static string getIPAddress(HttpRequestBase request)

{

string szRemoteAddr = request.UserHostAddress;

string szXForwardedFor = request.ServerVariables["X_FORWARDED_FOR"];

string szIP = "";

if (szXForwardedFor == null)

{

szIP = szRemoteAddr;

}

else

{

szIP = szXForwardedFor;

if (szIP.IndexOf(",") > 0)

{

string [] arIPs = szIP.Split(',');

foreach (string item in arIPs)

{

if (!isPrivateIP(item))

{

return item;

}

}

}

}

return szIP;

}

以上是 如何在ASP.NET MVC中获取客户端的IP地址? 的全部内容, 来源链接: utcz.com/qa/418370.html

回到顶部