Fitur baru di Asp.Net 2.0 adalah dukungan penulisan ulang url bawaannya. Ketika saya melihat fitur baru ini, saya menemukan bahwa fitur tersebut tidak memiliki dukungan ekspresi reguler, yang sebenarnya merupakan inti dari Url Mapper. ScottGlu di blognya menjelaskan alasan mengapa tim Asp.Net tidak mengimplementasikan fitur ini. Pada dasarnya mereka menyadari bahwa versi berfitur lengkap ingin memanfaatkan fitur baru IIS 7.0 berikutnya, khususnya dukungan untuk semua tipe konten (gambar dan direktori).
Bagaimanapun, sangat mudah untuk mengimplementasikan Modul Penulisan Ulang Url dengan dukungan Regex di Asp.Net. Saya menulis HttpModule yang cepat dan sederhana untuk ini. Seluruh keajaiban dilakukan dalam beberapa baris dalam HttpModule:
1 public void Rewrite_BeginRequest(object sender, System.EventArgs args) {
2 string strPath = HttpContext.Current.Request.Url.AbsolutePath;
3 UrlRedirection oPR = UrlRedirection baru();
4 string strURL = strPath;
5 string strRewrite = oPR.GetMatchingRewrite(strPath);
6 if (!String.IsNullOrEmpty(strRewrite)) {
7 strURL = strTulis ulang;
8 } lain {
9 strURL = strPath;
10 }
11 HttpContext.Saat ini.RewritePath("~" + strURL);
12 }
Kode ini cukup jelas. Ketika permintaan yang diproses oleh mesin Asp.Net, modul memeriksa xml untuk kecocokan regex. Saya telah melihat banyak mesin Penulisan Ulang Url yang menggunakan Web.config untuk menyimpan aturan yang cocok tetapi saya lebih suka menggunakan file xml tambahan. File aturan penulisan ulang terlihat seperti berikut:
1 <?xml version="1.0" coding="utf-8" standalone="yes"?>
2 <penulisan ulang url>
3 <nama aturan="Halaman Kategori">
4 <url>/([a-zA-Z][w-]{1.149}).aspx</url>
5 <rewrite>/Default.aspx?Category=$1</rewrite>
6 </aturan>
7 <nama aturan="Halaman Item">
8 <url>/([a-zA-Z][w-]{1.149})/([a-zA-Z][w-]{1.149}).aspx</url>
9 <rewrite>/Default.aspx?Category=$1&Item=$2</rewrite>
10 </aturan>
11 </urlpenulisan ulang>
Rutinitas pencocokan aturan yang diimplementasikan dalam metode GetMatchingRewrite() cukup sederhana dan ringan:
1 public string GetMatchingRewrite(string URL) {
2 senar strRtrn = "";
3
4 Sistem.Teks.RegularExpressions.Regex oReg;
5
6 foreach (RedirectRule oRule di Rules) {
7
8 Reg = Regex baru(oRule.URL);
9 Cocokkan oMatch = oReg.Match(URL);
10
11 if (oMatch.Sukses) {
12 strRtrn = oReg.Replace(URL, oRule.Rewrite);
13 }
14
15 }
16 kembalikan strRtrn;
17 }
Saya telah mengunggah contoh proyek yang menggunakan mesin penulisan ulang ini. HttpModule dan kelas pembantunya ada di dalam folder App_Code. Saya harap kode ini bermanfaat bagi Anda, jika Anda memiliki pertanyaan, tinggalkan komentar di entri ini. Selamat membuat kode!
--------------------------------------------------- ------------------------------
DARI DEVEL.oping.net
diposting pada 26-04-2006 14:17 徐灿钊Asp.net专栏 阅读(48) 评论(1) 编辑 收藏 收藏至365Key 所属分类: .net2.0
arti:
# re: Penulisan Ulang Url dengan Regex untuk ASP.NET 2.0(在asp.net2.0中使用正规表达式建立URL重写) 26-04-2006 20:22 | AXii
哈哈哈,测试后 1 public void Rewrite_BeginRequest(pengirim objek, System.EventArgs args)
2 {
3 string appPath = HttpContext.Current.Request.ApplicationPath;
4 HttpContext.Current.Response.Write(appPath + "<br />");
5
6 string strPath = HttpContext.Current.Request.Url.AbsolutePath;
7 HttpContext.Current.Response.Write(strPath + "<br />");
8
9 strPath = strPath.Substring(appPath.Length);
10
11 HttpContext.Current.Response.Write(strPath + "<br />");
12
13 UrlRedirection oPR = UrlRedirection baru();
14
15 string strURL = strPath;
16
17 string strRewrite = oPR.GetMatchingRewrite(strPath);
18
19 jika (!String.IsNullOrEmpty(strRewrite))
20 {
21 strURL = strTulis Ulang;
22 }
23 lainnya
24 {
25 strURL = strPath;
26 }
27
28 HttpContext.Saat ini.RewritePath("~" + strURL);
29 } cara kerja yang baik解决虚拟路径问题。
2、无法满足页面回发的问题解决,还请您来修改:):