【问题标题】:ASP.NET MVC doesn't call global.asax' EndRequestASP.NET MVC 不调用 global.asax' EndRequest
【发布时间】:2010-10-20 08:12:08
【问题描述】:

我正在尝试在每个请求结束时执行一些操作。 我更改了创建新项目时生成的 Application_Start() 进行测试:

protected void Application_Start()
{
    EndRequest += (s, e) =>
    {
        Console.Write("fghfgh");
    };
    RegisterRoutes(RouteTable.Routes);
}

不会调用 lambda。任何想法为什么?

编辑: 我看到他们在 SharpArch [http://code.google.com/p/sharp-architecture/] 中做类似的事情,并且确实在那里工作...... 不,我不想使用 HttpModule。

编辑2: 我发现的唯一解决方法是将 Application_EndRequest 与 global.asax 的私有静态成员结合使用:

private static WebSessionStorage wss;
protected void Application_Start()
{
    //...
    wss = new WebSessionStorage(this);
    //...
}

protected void Application_EndRequest(object sender, EventArgs e)
{
    wss.EndRequest(sender, e);
}

wss 必须是私有的,因为看起来 Application_EndRequest 是使用不同的实例对象 (this) 调用的。这也可能是我的事件(如开头所述)没有被调用的原因。

【问题讨论】:

标签: asp.net-mvc global-asax


【解决方案1】:

我通常这样做:

protected void Application_EndRequest(object sender, EventArgs e)
{
}

这按预期工作。虽然不知道这个事件。

【讨论】:

  • 我实际上将 this 实例传递给某个对象,该对象又与它自己的处理程序挂钩。所以我不能使用 Application_EndRequest。
  • 在 Application_Start 我正在做:NHSession.Init(new WebSessionStorage(this)); WebSessionManager 在其 ctor 中挂钩: public WebSessionStorage(HttpApplication app) { app.EndRequest += Application_EndRequest; }
【解决方案2】:

由您的 global.asax 文件表示的 HttpApplication 实例是一个仅表示 first HttpApplication 对象的实例。不保证此 HttpApplication 实例将用于任何其他请求。

您需要覆盖 global.asax 中的 Init() 方法,并在 that 方法中连接您想要的任何事件:

public override void Init() {
    base.Init();

    EndRequest += MyEventHandler;
}

有关 HttpApplication 对象的更多信息,请参阅this MSDN article

【讨论】:

    【解决方案3】:

    最好的办法是在 HttpModule 中执行此操作。我使用 HttpModule 来管理 MVC 应用程序中的 NHibernate 会话,它运行良好。在开始请求中,我将 sessionFactory 绑定到 ManagedWebSessionContext(在 NHibernate 中但相当无证),然后在结束请求中我提交任何事务并取消绑定 sessionFactory。

    我认为将其分离到一个 HttpModule 中也更简洁。

    【讨论】:

      【解决方案4】:

      对于 MVC.net 你需要添加。

      protected void Application_EndRequest()
      {
        Debug.WriteLine("End Request");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-16
        • 2011-06-24
        • 2021-08-02
        • 2012-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多