ฉันเห็นบนอินเทอร์เน็ตว่ามีเพื่อนหลายคนเขียน urlrewrite ใน asp.net และใช้วิธี HttpHandle+Server.Transfer อันที่จริงวิธีการนี้ผิด ประการแรก HttpHandle ไม่สามารถใช้ urlrewrite ได้ ประการที่สอง Server.Transfer เป็นการเปลี่ยนเส้นทางมาตรฐาน ไม่ใช่ urlrewrite เลย
ที่จริงแล้ว คุณไม่จำเป็นต้องติดตั้ง HttpHandle หรือ HttpModule ของคุณเองเพื่อใช้งาน urlrewrite ซึ่งสามารถนำไปใช้งานได้อย่างง่ายดายด้วยโค้ดเพียงไม่กี่บรรทัด
สิ่งที่ฉันแนะนำที่นี่คือบนโฮสต์เสมือน โฮสต์เสมือนนั้นแตกต่างจากเซิร์ฟเวอร์ของคุณเอง คุณไม่ได้รับอนุญาตให้แก้ไข iis และคุณไม่ได้รับอนุญาตให้ติดตั้งปลั๊กอิน iis เช่น iis rewrite แต่เรายังคงสามารถทำหน้าที่ที่จำเป็นให้เสร็จสิ้นได้อย่างง่ายดาย
วิธีการเฉพาะมีดังนี้: เปิด global.asax.cs และค้นหาโมฆะที่ได้รับการป้องกัน Application_BeginRequest (ผู้ส่งวัตถุ EventArgs e) จากชื่อวิธีผมคิดว่าพอจะเดาได้ว่ามันทำอะไร ป้อนรหัสต่อไปนี้:
protected void Application_BeginRequest(Object sender, EventArgs e)
-
string oldUrl = HttpContext.Current.Request.RawUrl;
string pattern = @"^(.+)default/(d+).aspx(?.*)*$";
string แทนที่ = "$1default.aspx?id=$2";
if(Regex.IsMatch(oldUrl, pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled))
-
string newUrl = Regex.Replace (oldUrl, รูปแบบ, แทนที่, RegexOptions.Compiled | RegexOptions.IgnoreCase);
this.Context.RewritePath (newUrl);
-
-
ด้วยโค้ดข้างต้น ฉันเข้าถึง URL ที่คล้ายกับ: .../default/123.aspx แน่นอนว่าไม่มี URL นี้อยู่ในคอมพิวเตอร์ของฉัน ดังนั้น URL ดังกล่าวจึงจะถูกส่งไปที่: .../default.aspx? =123.
แน่นอนว่าด้วยการใช้นิพจน์ทั่วไปที่มีประสิทธิภาพ คุณสามารถเขียน URL ใหม่ได้ตามความต้องการของคุณเอง ทั้งหมดนี้ดำเนินการแบบเงียบๆ บนฝั่งเซิร์ฟเวอร์ และไคลเอ็นต์จะไม่ทราบเรื่องนี้ เนื่องจากอยู่บนโฮสต์เสมือน เราจึงสามารถเปลี่ยนเส้นทางไฟล์ .aspx ได้เท่านั้น หากเป็นเซิร์ฟเวอร์ของเราเอง เราจึงสามารถประมวลผลส่วนต่อท้ายใดๆ ได้โดยการลงทะเบียนส่วนต่อท้ายใน iis ตัวอย่างเช่น คุณสามารถลงทะเบียนประเภทเช่น *.myweb เพื่อที่เมื่อมีผู้อื่นเยี่ยมชม default/456.myweb คุณสามารถเปลี่ยนเส้นทางไปที่ default.aspx?id=456 ได้ กล่าวอีกนัยหนึ่ง ตราบใดที่คุณคิดออก .net สามารถช่วยให้คุณตระหนักได้ และทั้งหมดนี้ไม่จำเป็นต้องใช้โค้ดมากนัก