使用Application_AquireRequestState事件

时间:2017-09-19 20:15:56

标签: c# asp.net asp.net-web-api

我有一个代码,用于在应用程序的Application_AcquireRequestState事件中注册路由。注册路由后,我在Http运行时缓存中设置了一个标志,这样我就不会再次执行路由注册代码。在此事件Application_AcquireRequestState中注册路线有一个特定原因。

重新启动应用程序池后,如果有一个有效的(匹配路由)请求,路由注册代码将启动,但IIS / ASP.Net不会提供该请求,并返回404.后续有效请求为一切正常。

我想确保第一个请求也能正确提供。

是否可以重写请求,以便在路由注册完成后,如果url与已注册的路由之一匹配,我们可以以某种方式重播请求?有没有解决这个问题的解决方案?

2 个答案:

答案 0 :(得分:2)

如下所示

events order

及以下

events

以下SO线程

When does routing take place in the pipeline?

您可能需要定位AuthenticateRequestPostAuthorizeRequest事件之间的内容以进行网址注册,因为此后路由会发生

Url路由恰好在PostAuthorizeRequest事件之后发生,并且由于路由已经注册,第一个请求也将被正常提供。

答案 1 :(得分:1)

这是一种pseudocode,您可以在Global.asax中使用。

private bool RootIsRegistered = false; //register Application level var

void Application_BeginRequest(object sender,EventArgs e){
   if(!RootIsRegistered)
      RegisterRoots();
}

通过这种方式,您可以确保即使在第一次请求时也会注册您的根。