我试图在每个请求结束时执行一些操作。 我更改了创建新项目时生成的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)调用的。这也可能是我的活动(如开头所述)未被调用的原因。
我通常这样做:
protected void Application_EndRequest(object sender, EventArgs e)
{
}
这按预期工作。虽然不知道这个活动。
first HttpApplication 对象。不保证 HttpApplication 的此实例将用于任何其他请求。
您需要重写 global.asax 中的 Init() 方法,并在that 方法中连接您想要的任何事件:
public override void Init() {
base.Init();
EndRequest += MyEventHandler;
}
请参阅
这篇 MSDN 文章,了解有关 HttpApplication 对象的更多信息。
我认为将其分离到 HttpModule 中也更干净。
protected void Application_EndRequest()
{
Debug.WriteLine("End Request");
}