我有一个 HTTPModule,它可以执行一些基于角色的页面访问安全性(我必须在我们获得的一些代码中改进一些安全性)。
我注意到,在一个实例中,它不会在 Server.Transfer 上触发。
这是代码片段:
' move to target page
Select Case eTransferMethod
Case TargetPageTransferMethod.Redirect
Page.Response.Redirect(strPage, False)
Case TargetPageTransferMethod.Transfer
Context.Handler = Me
Page.Server.Transfer(strPage)
Case TargetPageTransferMethod.None
' Do nothing
End Select
我在这里讨论的案例是 TargetPageTransferMethod.Transfer 案例。该页面将是一个 .aspx 页面。
现在我知道 AcquireRequestState 是在此代码中的其他 Server.Transfer 调用上触发的。事实上,当单击传输到的页面上的按钮时,它会在回发时触发。讽刺的是,我的安全代码在传输到此页面时被绕过,但在单击此页面的取消按钮时拒绝回发访问! :eek:
我会发布代码库的更多详细信息,但它是如此复杂和庞大,解释起来会是一场噩梦。
所以基本上我在问“什么可能导致 HTTPModule 中的 AcquireRequestState 事件在调用 Server.Transfer 时不触发?”
最佳答案
解决这个问题的方法是创建一个继承 System.Web.UI.PageHandlerFactory 类的自定义 HttpHandler。
然后,您可以重写 GetHandler 方法,每当创建页面实例时都会调用该方法,无论是在 Response.Redirect 上还是在 Server.Transfer 上。
注册这个新的处理程序以使用“*.aspx”扩展名,所有页面将自动使用新的处理程序。这允许您在 Server.Transfer 上进行自定义授权以及使用依赖项注入(inject)框架(例如 MS Unity)。
关于asp.net - 为什么我的 HTTPModule 中的 AcquireRequestState 有时不会触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1867614/