在Global.asax.cs中获取客户端IP地址-可以吗?

Ami*_*aqi 2 c# ip global-asax asp.net-mvc-4

当然,这Request.UserHostAddress办法是伟大的,但在Application_Start()Request对象还不存在。

我想先通过用户的IP猜测用户的位置-一次-当他/她进入网站时,并为其设置默认语言环境。然后,我将在其他地方进行操作。

我认为,必须有被否决的事件Global.asax,其Request存在于它,但是我无法找到该事件...

确实,任何其他技巧都将受到赞赏...

更新

实际上,我正在开发一个多语言的网站,并MaxMind GeoIP用来通过其IP获取用户所在的国家。因此,我想找到一种方法,以便当用户进入网站时(仅也是第一个请求),我检索他/她的国家/地区并将其存储在Session或全局变量中。

我知道我可以在其他任何地方实现我的目标,Request.UserHostAddress而且我也没有任何问题-对于这个小型应用程序,每个请求的一行开销根本不是问题。

但是我想知道是否有可能只设置一次全局变量...!?!

Dmy*_*tro 5

Application_Start()不是正确的事件,您可以在其中执行此操作。它不会针对用户的每个请求运行,它会对asp.net应用程序进行一些基本初始化。

例如,更好的解决方案是针对用户

protected void Application_BeginRequest(){}
Run Code Online (Sandbox Code Playgroud)

在客户端请求开始时运行。

关于最早的事件,请求和会话都将可用。

void Application_AcquireRequestState(object sender, EventArgs e)
{
    if (System.Web.HttpContext.Current.Session != null)
    {
        if (Session["locale"] != null)
        {                  
             //already set variable. 
        }
        else
        {
            //set some variable
            Session["locale"] = "code";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,“基于IP设置语言环境”到底对您意味着什么呢?你能澄清这个任务吗?因为通常,对于每个请求执行,都必须设置此“区域设置”信息。