我有一个自定义的 HttpModule,它可以处理用户是否需要支付发票。如果用户进行了回发,但在我的 HttpModule 的发票部分被“捕获”,我想在支付发票后重新发布用户进行的原始回发,因此用户不必开始超过。
例子:
- 用户填写表单并将其提交给服务器
- HttpModule 识别用户有未付发票,并将用户重定向到支付页面
- 用户支付账单
- 第1点的原帖被转发,用户可以继续
我尝试在会话状态中保存 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"];
}
}
}
}
}
}
}