【问题标题】:How to get caller caller IP address in Application_Start如何在 Application_Start 中获取呼叫者呼叫者 IP 地址
【发布时间】:2015-12-25 10:42:30
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    所以,你的问题的答案就是你不能这样做(当然,除非你在 Application_Start 事件中设置一个静态变量并使用 Application_BeginRequest 作为 Darin 的答案或 MVC 过滤器来实际做日志记录)。

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

    【讨论】:

      【解决方案2】:

      应用程序启动时 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;
                  }
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-27
        • 1970-01-01
        • 2020-07-26
        • 1970-01-01
        相关资源
        最近更新 更多