在HttpModule中重用回发数据

时间:2012-04-18 11:24:54

标签: asp.net postback httpmodule

我有一个自定义的HttpModule,可以处理用户是否需要支付发票。如果用户进行了回发,但是被抓住了#34;在我的HttpModule的发票部分,我想在发票付款后重新发布用户所做的原始回发,这样用户就不必重新开始。

示例:

  1. 用户填写表单并将其提交给服务器
  2. HttpModule标识用户有未付款的发票,并将用户重定向到付款页面
  3. 用户支付账单
  4. 重新发布第1点的原始帖子,用户可以继续
  5. 我已尝试在会话状态下保存HttpContext(来自HttpContext.Current),并在支付账单时将HttpContext.Current设置为会话中的值,但它不起作用。

    在HttpModule中断正常流后,是否可以重用回发?

    我的HttpModule看起来像这样:     class UnpaidInvoiceHttpModule:IHttpModule     {         private HttpApplication cHttpApp;

        public void Dispose(){}
    
        public void Init(HttpApplication context)
        {
            cHttpApp = context;
            context.PreRequestHandlerExecute += new EventHandler(CheckForUnpaidInvoices);
        }
    
        private void CheckForUnpaidInvoices(Object s, EventArgs e)
        {
            if (HttpContext.Current.Request.Path.EndsWith(".aspx") || HttpContext.Current.Request.Path.EndsWith(".asp") || HttpContext.Current.Request.Path == "/")
            {
                if (HttpContext.Current.Request.Path != "/login.aspx" 
                    && HttpContext.Current.Request.Path != "/Payment/Default.aspx"
                    && HttpContext.Current.Request.Path != "/Payment/Default_notice.aspx" 
                    && HttpContext.Current.User != null)
                {
                    if (HttpContext.Current.User.Identity.IsAuthenticated)
                    {
                        CustomUser mUser = ManagerSecurity.SecurityAPI.GetUser();      
                        if (mUser.HasUnpaidInvoices)
                        {
                            HttpContext.Current.Session["prepaymentHttpContext"] = HttpContext.Current;
                            HttpContext.Current.Response.Redirect("/Payment/Default.aspx");
                        }
                        else
                        {
                            if (HttpContext.Current.Session["prepaymentHttpContext"] != null)
                            {
                                HttpContext.Current = (HttpContext)HttpContext.Current.Session["prepaymentHttpContext"];
                            }
                        }
                    }
                }
            }
        }
    }
    

1 个答案:

答案 0 :(得分:2)

This link应该为您提供完成所描述内容所需的一切。请注意,此解决方案不会延迟帖子。它立即将数据重新发布到不同的页面。您必须修改它以在某处存储名称/值集合(可能在发票页面或数据库中的ViewState中),以便在支付发票后再次将其拉出。支付发票后,您可以提取名称 - 值集合并将其传递给“重定向和发布”方法,以使用户回到原始目的地的轨道。