我有一个代码,用于在应用程序的Application_AcquireRequestState
事件中注册路由。注册路由后,我在Http运行时缓存中设置了一个标志,这样我就不会再次执行路由注册代码。在此事件Application_AcquireRequestState
中注册路线有一个特定原因。
重新启动应用程序池后,如果有一个有效的(匹配路由)请求,路由注册代码将启动,但IIS / ASP.Net不会提供该请求,并返回404.后续有效请求为一切正常。
我想确保第一个请求也能正确提供。
是否可以重写请求,以便在路由注册完成后,如果url与已注册的路由之一匹配,我们可以以某种方式重播请求?有没有解决这个问题的解决方案?
答案 0 :(得分:2)
如下所示
及以下
以下SO线程
When does routing take place in the pipeline?
您可能需要定位AuthenticateRequest
或PostAuthorizeRequest
事件之间的内容以进行网址注册,因为此后路由会发生
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();
}
通过这种方式,您可以确保即使在第一次请求时也会注册您的根。