如何在Application_Start中获取调用者调用者IP地址

时间:2015-12-25 10:42:30

标签: asp.net asp.net-mvc asp.net-mvc-4 global-asax

如何在ASP.NET MVC4 Global.asax.cs Application_Start事件中获取调用者IP地址? 那里没有HttpContext.Current.Request对象。 Thread.CurrentPrincipal.Identity存在。

我想记录用于启动应用程序的用户名和IP地址。

MVC4应用程序在Windows和Mono中运行

2 个答案:

答案 0 :(得分:2)

正如您在ASP.NET Lifecycle on MSDN所看到的那样,Application_Start事件不仅发生在构建请求对象的AcquireRequestState事件之前很久,它也是在带外的情况下完成的。请求生命周期。换句话说,Application_Start仅在应用程序启动时或应用程序池回收时发生一次,而不是每次请求一次。

因此,您的问题的答案很简单,您无法做到这一点(当然,除非您在Application_Start事件中设置静态变量,并使用Application_BeginRequest和Darin一样#&# 39;回答或MVC过滤器实际进行记录)。

但MVC包含authorization filters and action filters,用于实现横切关注点,例如记录和/或审核当前用户的IP地址。授权和操作过滤器在创建请求对象之后才会运行。

答案 1 :(得分:0)

应用程序启动时,HttpContext不可用。您可以在global.asax中的BeginRequest方法中实现这一点:

private static bool initialized = false;
private static object syncRoot = new object();
protected void Application_BeginRequest()
{
    if (!initialized)
    {
        lock (syncRoot)
        {
            if (!initialized)
            {
                // do your stuff with the user IP getting from the current context
                initialized = true;
            }
        }
    }
}