asp.net - 为什么我的 HTTPModule 中的 AcquireRequestState 有时不会触发?

标签 asp.net httpmodule server.transfer

我有一个 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/

相关文章:

c# - ICollection 在此上下文中仅支持原始类型或枚举类型

asp.net 全局资源错误 'The resource object with key ' '未找到'

c# - 如何在 Asp.Net 中的 Server.Transfer 之前设置 Response Header?

c# - 使用 HttpModule 处理 html 文件以捕获 IIS7 上的 404 错误

asp.net - Server.Transfer引发执行子请求时出错。怎么解决?

SEO 问题,以及关于 Server.Transfer (Asp.net)

javascript - 刷新 UpdatePanel 时未加载 Google 交互式图表

c# - 从 Dynamics CRM 2011 插件调用 System.Diagnostics.Trace

asp.net - HttpModule 在 IIS 6 上未接收 cookie

c# - HttpModule - 需要在 OnError 命中时将用户重定向到特定页面