解决Asp.net网站url重定向+form验证模块顺序问题
一直以来都在项目中使用了UrlRewritingNet模块来实现url重定向的功能,很是方便好用。但有一个问题一直没有解决,就是当用户访问需要登陆的页面是会自动转到login页面,这时其returl参数会将原始的url暴露出来,很是不爽。
今天花了点时间研究了一下,发现
- UrlRewriteModule是在BeginRequest事件中进行重写的
- Form认证模块(FormsAuthenticationModule)是在AuthenticateRequest中进行权限判断的
- AuthenticateRequest事件晚于BeginRequest执行,所以认证过程中产生的returl肯定是取不到原始的rawurl了
- 为了让returl能够保持为原始的url,需要将UrlRewriteModule的重写改在AuthorizeRequest事件中执行
UrlRewritingNet没有提供这种选项,所幸的是这是个开源的工程,于是将其代码进行了一些修改。增加了一个RewriteOnRequestBegin的配置参数,在其初始化方法中修改代码如下:
C#:
-
if (UrlRewriting.Configuration.RewriteOnRequestBegin)
-
{
-
context.BeginRequest += new EventHandler(OnBeginRequest);
-
}
-
else
-
{
-
context.AuthorizeRequest += new EventHandler(OnBeginRequest);
-
}
这样我们就可以随便配置是要在认证前重新还是认证后重写了。
参考:
-

- 事件执行顺序
执行Application_BeginRequest
执行Application_AuthenticateRequest
执行Application_AuthorizeRequest
执行Application_ResolveRequestCache
执行Application_AcquireRequestState
执行Application_PreRequestHandlerExecute
执行Application_PostRequestHandlerExecute
执行Application_ReleaseRequestState
执行Application_UpdateRequestCache
执行Application_EndRequest










October 7th, 2008 at 4:59 pm
order viagra