這里介紹Ihttpmodule處理請(qǐng)求管道的方法。Response.Redirect的原理是服務(wù)器設(shè)置返回http狀態(tài)碼為302,然后客戶端執(zhí)行跳轉(zhuǎn),用reflector可以看到.net的代碼段。
以下是HttpResponse類的Redirect方法中的跳轉(zhuǎn)代碼
this.StatusCode = 0x12e;
this.RedirectLocation = url;
所以,我們可以擴(kuò)展Ihttpmodule來攔截http狀態(tài)碼,強(qiáng)制設(shè)為200,同時(shí)插入js代碼段來實(shí)現(xiàn)新窗口打開。以下是Ihttpmodule的實(shí)現(xiàn)代碼
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
namespace ClassLibrary2
...{
public class Class1:System.Web.IHttpModule
...{
public void Init(HttpApplication application)
...{
application.PreSendRequestHeaders += new EventHandler(application_PreSendRequestHeaders);
}
void application_PreSendRequestHeaders(object sender, EventArgs e)
...{
HttpApplication Application = (HttpApplication)sender;
HttpContext context = Application.Context;
if (context.Response.StatusCode == 302)
...{
context.Response.Write("");
context.Response.StatusCode = 200;
}
}
public void Dispose()
...{
}
}
}
最后配置一下web.config就可以了
this.Write("Object moved
");
this.Write("Object moved to here.
");
this.Write("
");
以下是HttpResponse類的Redirect方法中的跳轉(zhuǎn)代碼
this.StatusCode = 0x12e;
this.RedirectLocation = url;
所以,我們可以擴(kuò)展Ihttpmodule來攔截http狀態(tài)碼,強(qiáng)制設(shè)為200,同時(shí)插入js代碼段來實(shí)現(xiàn)新窗口打開。以下是Ihttpmodule的實(shí)現(xiàn)代碼
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
namespace ClassLibrary2
...{
public class Class1:System.Web.IHttpModule
...{
public void Init(HttpApplication application)
...{
application.PreSendRequestHeaders += new EventHandler(application_PreSendRequestHeaders);
}
void application_PreSendRequestHeaders(object sender, EventArgs e)
...{
HttpApplication Application = (HttpApplication)sender;
HttpContext context = Application.Context;
if (context.Response.StatusCode == 302)
...{
context.Response.Write("");
context.Response.StatusCode = 200;
}
}
public void Dispose()
...{
}
}
}
最后配置一下web.config就可以了
this.Write("
");
this.Write("Object moved to here.
");
this.Write("
");