ทันใดนั้นฉันก็ค้นพบว่า ASP.NET 2.0 นั้นให้การสนับสนุน UrlMapping อย่างเป็นธรรมชาติ - ส่วน <urlMappings> ในไฟล์ web.config ฉันคร่ำครวญว่าทุกวันนี้การเขียนโปรแกรมไม่ใช่งานด้านเทคนิคจริงๆ
<?xml เวอร์ชัน = "1.0"?>
<การกำหนดค่า>
<system.เว็บ>
<urlMappings>
<เพิ่ม url="~/2006/07" mappedUrl="~/Month.aspx?year=2006&month=01"/>
<เพิ่ม url="~/2006/08" mappedUrl="~/Month.aspx?year=2006&month=02"/>
</urlMappings>
<คอมไพล์ดีบัก = "true"/>
</system.เว็บ>
</การกำหนดค่า>
การกำหนดค่านี้อนุญาตให้โปรแกรม ASP.NET รองรับ UrlMapping ใน ASP.NET Development Server ได้โดยตรง (นั่นคือ เลือกระบบไฟล์เมื่อสร้างโครงการ ASP.NET) แต่มีข้อบกพร่องหลายประการ:
1. สามารถแมปที่อยู่คงที่ได้เท่านั้น ดังนั้นจึงกำหนดค่าได้เพียงที่อยู่เดียวเท่านั้น
2. ไม่จำเป็นต้องกำหนดค่าอื่นใดใน ASP.NET Development Server เนื่องจากโมเดลการตอบสนองคำขอใน IIS จึงคาดว่าการแมปจำเป็นต้องตั้งค่าใน IIS ในกรณีนี้ ฉันกำลังค้นหาข้อมูลทุกที่เพื่อดูวิธีตั้งค่าการแมปใน ASP.NET Development Server แต่ผลลัพธ์ก็คือไม่ได้ผล
เนื่องจากข้อบกพร่องของ UrlMapping ที่ไม่รองรับนิพจน์ทั่วไป ฉันจึงสร้าง UrlMapping ที่รองรับนิพจน์ทั่วไป น่าเสียดาย เนื่องจาก UrlMapping ถูกเรียกโดย HttpApplication และ HttpApplication เป็นแบบภายใน จึงไม่สามารถทำอะไรกับมันได้ ดังนั้นการใช้งานจึงไม่น่าเชื่อถือ เมื่อเปรียบเทียบกับ UrlMapping
ให้ดาวน์โหลดไฟล์ <Section> เพิ่มเติมใน Web.config (ไฟล์ที่ดาวน์โหลดมีคอมโพเนนต์ RegexUrlMapping และ ASP.NET ตัวอย่าง โปรดทราบว่าจำเป็นต้องปรับใช้โปรแกรม ASP.NET ใน IIS และต้องตั้งค่าการแมป วิธีการคือคลิกขวาที่ไดเร็กทอรีเสมือน เลือก Properties เลือก Configuration เพิ่มการอ้างอิงถึง c:windowsmicrosoft.netframeworkv2.0.50727aspnet_isapi.dll ในการแมปแอปพลิเคชัน wildcard และลบ hook ไปที่ ยืนยันว่ามีไฟล์อยู่หรือไม่ เพื่อขี้เกียจ ฉันใช้ไวด์การ์ดเพื่อแมปทุกอย่างกับ ISAPI ของ ASP.NET 2.0 ในการพัฒนาจริง วิธีที่ดีที่สุดคือเพิ่มการแมปที่เฉพาะเจาะจงมากขึ้นตามความเหมาะสม)
ตัวอย่างการกำหนดค่าใน Web.config คือ ดังต่อไปนี้:
<?xml เวอร์ชัน = "1.0"?>
<การกำหนดค่า>
<configSections>
<ชื่อส่วน = "RegexUrlMappings" type = "Cnblogs.DTC.THIN.RegexUrlMapping.RegexUrlMappingsSection, Cnblogs.DTC.THIN.RegexUrlMapping"/>
</configSections>
<RegexUrlMappings เปิดใช้งาน = "true" rebaseClientPath = "true">
<เพิ่ม url="(d+)$" mappedUrl="default.aspx?id=$1"/>
<เพิ่ม url="(?<=/)(?<id>[az]+)$" mappedUrl="default.aspx?id=${id}" />
<เพิ่ม url="/$" mappedUrl="/default.aspx?id=0"/>
</การแมป RegexUrl>
<system.เว็บ>
<httpโมดูล>
<เพิ่มชื่อ = "RegexUrlMappingModule" type = "Cnblogs.DTC.THIN.RegexUrlMapping.RegexUrlMappingModule, Cnblogs.DTC.THIN.RegexUrlMapping"/>
</httpโมดูล>
<คอมไพล์ดีบัก = "true"/>
<โหมดการรับรองความถูกต้อง = "Windows"/>
</system.เว็บ>
</configuration>
แอตทริบิวต์ที่เปิดใช้งานของ RegexUrlMapping ใช้เพื่อเปิดและปิดการแมป สำหรับ rebaseClientPath โปรดดูพารามิเตอร์ rebaseClientPath ใน HttpContext.RewritePath
<add> ใช้เพื่อเพิ่มกฎการแมป url คือรูปแบบนิพจน์ทั่วไปที่ตรงกับเส้นทาง และ mappedUrl คือกฎการแทนที่ สำหรับการใช้งาน โปรดดูเมธอด Regex.Replace ในตัวอย่างข้างต้น การเพิ่มครั้งแรกจะกำหนดกลุ่ม 1 วงเล็บใน url ดังนั้นในการอ้างอิงภายหลัง $1
การเพิ่มครั้งที่สองใช้ (?<id>) ใน URL เพื่อกำหนดรหัสกลุ่ม จากนั้นใช้ ${id} เพื่ออ้างอิงกลุ่ม ประการที่สามคือการแทนที่สตริงแบบคงที่ ดูเหมือนว่านิพจน์ทั่วไปยังคงมีความสำคัญมาก~~
http //www.cnblogs.com/thinhunan/archive/2006/08/22/regexurlmapping.html