gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:00:53 24 4
gpt4 key购买 nike

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

基本上,我想提取客户端 PC 的 IP 地址,但我无法理解当前的 MVC 结构如何改变了这一切。

据我所知,most of the variable objects has been replaced by the HttpRequest variants .

有人愿意分享一些资源吗? 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;
}

如何从 Controller 页面调用此函数?

最佳答案

简单的答案是使用 HttpRequest.UserHostAddress property .

示例:从 Controller 内部:

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;
..
}
}
}

但是,如果请求已被一个或多个传递,proxy servers那么 HttpRequest.UserHostAddress property 返回的 IP 地址将是中继请求的最后一个代理服务器的 IP 地址。

代理服务器可以使用事实上的标准,将客户端的IP地址放在 X-Forwarded-For 中。 HTTP header 。除了不能保证请求具有 X-Forwarded-For header 之外,也不能保证 X-Forwarded-For 尚未被 SPOOFED .

<小时/>

原始答案

Request.UserHostAddress

上面的代码提供了客户端的 IP 地址,而无需查找集合。 Request 属性在 Controller (或 View )中可用。因此,您可以传递一个 Request 对象来获得相同的结果,而不是将 Page 类传递给您的函数:

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;
}

关于c# - 如何在 ASP.NET MVC 中获取客户端的 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2577496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com