我有一个自定义的HttpModule,可以处理用户是否需要支付发票。如果用户进行了回发,但是被抓住了#34;在我的HttpModule的发票部分,我想在发票付款后重新发布用户所做的原始回发,这样用户就不必重新开始。
示例:
我已尝试在会话状态下保存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"];
}
}
}
}
}
}
}
答案 0 :(得分:2)
This link应该为您提供完成所描述内容所需的一切。请注意,此解决方案不会延迟帖子。它立即将数据重新发布到不同的页面。您必须修改它以在某处存储名称/值集合(可能在发票页面或数据库中的ViewState中),以便在支付发票后再次将其拉出。支付发票后,您可以提取名称 - 值集合并将其传递给“重定向和发布”方法,以使用户回到原始目的地的轨道。