คุณลักษณะใหม่ใน Asp.Net 2.0 คือการสนับสนุนการเขียน URL ใหม่ในตัว เมื่อฉันดูคุณสมบัติใหม่นี้ ฉันพบว่ามันขาดการสนับสนุนนิพจน์ทั่วไป ซึ่งเป็นจุดประสงค์ของ Url Mapper จริงๆ ScottGlu อธิบายสาเหตุที่ทีม Asp.Net ไม่ใช้ฟีเจอร์นี้ในบล็อกของเขา โดยพื้นฐานแล้ว พวกเขาตระหนักว่าเวอร์ชันที่มีคุณลักษณะครบถ้วนต้องการใช้ประโยชน์จากคุณลักษณะใหม่ของ IIS 7.0 ถัดไป โดยเฉพาะอย่างยิ่งการรองรับเนื้อหาทุกประเภท (รูปภาพและไดเร็กทอรี)
อย่างไรก็ตาม การใช้ Url Rewriting Module ที่รองรับ Regex ใน Asp.Net นั้นง่ายมาก ฉันเขียน HttpModule ที่ง่ายและรวดเร็วสำหรับสิ่งนี้ ความมหัศจรรย์ทั้งหมดเสร็จสิ้นภายในไม่กี่บรรทัดภายใน HttpModule:
1 public void Rewrite_BeginRequest(object sender, System.EventArgs args) {
2 สตริง strPath = HttpContext.Current.Request.Url.AbsolutePath;
3 UrlRedirection oPR = ใหม่ UrlRedirection();
4 สตริง strURL = strPath;
5 สตริง strRewrite = oPR.GetMatchingRewrite(strPath);
6 ถ้า (!String.IsNullOrEmpty(strRewrite)) {
7 strURL = strRewrite;
8 } อื่น ๆ {
9 strURL = strPath;
10 }
11 HttpContext.Current.RewritePath("~" + strURL);
12 }
รหัสนี้อธิบายตนเองได้ เมื่อมีคำขอที่ประมวลผลโดยกลไก Asp.Net โมดูลจะตรวจสอบ xml สำหรับการจับคู่ regex ฉันเคยเห็นกลไกการเขียน URL ใหม่จำนวนมากที่ใช้ Web.config เพื่อจัดเก็บกฎที่ตรงกัน แต่ฉันชอบใช้ไฟล์ xml เพิ่มเติม ไฟล์กฎการเขียนใหม่มีลักษณะดังนี้:
1 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
2 <urlเขียนใหม่>
3 <ชื่อกฎ = "หน้าหมวดหมู่">
4 <url>/([a-zA-Z][w-]{1,149}).aspx</url>
5 <เขียนใหม่>/Default.aspx?Category=$1</เขียนใหม่>
6 </กฎ>
7 <ชื่อกฎ = "หน้ารายการ">
8 <url>/([a-zA-Z][w-]{1,149})/([a-zA-Z][w-]{1,149}).aspx</url>
9 <เขียนใหม่>/Default.aspx?Category=$1&Item=$2</เขียนใหม่>
10 </กฎ>
11 </urlเขียนใหม่>
รูทีนการจับคู่กฎซึ่งมีการใช้งานในเมธอด GetMatchingRewrite() ค่อนข้างเรียบง่ายและมีน้ำหนักเบา:
1 สตริงสาธารณะ GetMatchingRewrite(string URL) {
2 สตริง strRtrn = "";
3
4 System.Text.RegularExpressions.Regex oReg;
5
6 foreach (RedirectRule oRule ในกฎ) {
7
8 Reg = Regex ใหม่ (oRule.URL);
9 จับคู่ oMatch = oReg.Match(URL);
10
11 ถ้า (oMatch.Success) {
12 strRtrn = oReg.Replace(URL, oRule.Rewrite);
13 }
14
15 }
16 ส่งคืน strRtrn;
17 }
ฉันได้อัปโหลดโครงการตัวอย่างที่ใช้เครื่องมือเขียนใหม่นี้ HttpModule และคลาสตัวช่วยอยู่ในโฟลเดอร์ App_Code ฉันหวังว่าคุณจะพบว่าโค้ดนี้มีประโยชน์ หากคุณมีคำถามใด ๆ เพียงแค่แสดงความคิดเห็นในรายการนี้ ขอให้มีความสุขในการเขียนโค้ด!
-
จาก DEVEL.oping.net
โพสต์เมื่อ 26-04-2549 เวลา 14:17 น. 徐灿钊Asp.net专栏 阅读(48) 评论(1) 编辑 收藏 收藏至365Key 所属分类: .net2.0
ความหมาย:
# re: การเขียน URL ใหม่ด้วย Regex สำหรับ ASP.NET 2.0(asp.net2.0中使用正规表达式建立URL重写) 2006-04-26 20:22 | AXii
哈哈哈 1 โมฆะสาธารณะ Rewrite_BeginRequest (ผู้ส่งวัตถุ System.EventArgs args)
2 {
appPath สตริง 3 ตัว = HttpContext.Current.Request.ApplicationPath;
4 HttpContext.Current.Response.Write(appPath + "<br />");
5
6 สตริง 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();
14
15 สตริง strURL = strPath;
16
17 สตริง strRewrite = oPR.GetMatchingRewrite(strPath);
18
19 ถ้า (!String.IsNullOrEmpty(strRewrite))
20 {
21 strURL = strRewrite;
22 }
23 อื่น ๆ
24 {
25 strURL = strPath;
26 }
27
28 HttpContext.Current.RewritePath("~" + strURL);
29 } 发现这个处理办法对于虚拟路径会出现转发错误,注意第2、3、9行,是我增加的,可以有效的解决虚拟路径问题.
2、无法满足页的问题!如何解决,还请您来修改:):