الميزة الجديدة في Asp.Net 2.0 هي دعم إعادة كتابة عنوان URL المدمج. عندما بحثت في هذه الميزة الجديدة، اكتشفت أنها تفتقر إلى دعم التعبيرات العادية، وهو ما يعد حقًا الهدف من مخطط URL. يشرح ScottGlu في مدونته سبب عدم قيام فريق Asp.Net بتنفيذ هذه الميزة. لقد أدركوا بشكل أساسي أن الإصدار الكامل المميز سيحتاج إلى الاستفادة من ميزات IIS 7.0 الجديدة التالية، وخاصة الدعم لجميع أنواع المحتوى (الصور والأدلة).
على أية حال، من السهل حقًا تنفيذ وحدة إعادة كتابة عنوان URL مع دعم 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 = new 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 <إعادة كتابة>
3 <اسم القاعدة = "صفحة الفئة">
4 <url>/([a-zA-Z][w-]{1,149}).aspx</url>
5 <rewrite>/Default.aspx?Category=$1</rewrite>
6 </القاعدة>
7 <اسم القاعدة = "صفحة العنصر">
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 </القاعدة>
11 </urlrewrites>
روتين مطابقة القاعدة، الذي يتم تنفيذه في طريقة GetMatchingRewrite() بسيط جدًا وخفيف الوزن:
1 public string GetMatchingRewrite(string URL) {
2 سلسلة strRtrn = "";
3
4 System.Text.RegularExpressions.Regex oReg;
5
6 foreach (RedirectRule oRule في القواعد) {
7
8 Reg = new 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-2006 14:17 عنوان Asp.net هو عنوان(48) عنوان(1) عنوان مفتاح 365 مفتاح: .net2.0
ترجمة:
# إعادة: إعادة كتابة عنوان URL باستخدام Regex لـ ASP.NET 2.0(asp.net2.0中使用正规表达式建立URL重写) 2006-04-26 20:22 |
إنشاء AXii
، تم إنشاء فراغ عام واحد Rewrite_BeginRequest(object sender, System.EventArgs args)
2 {
3 سلسلة appPath = 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 = new 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、الحصول على أفضل النتائج::)