تعلم ASP.NET MVC


الدرس: الطرق Routes


الصفحة السابقة
بعد هذه المقدمة الصغيرة التي أثارت شهيتنا ، حان الوقت للغوص في المجمع ، الجدي ، الثقيل ، الموشوم ، السيئ! لكن اطمئن ، معقد لا يعني أنه معقد. سنواصل السير بهدوء وسترى ، سوف تفهم كل شيء دون مشاكل ، وأنا متأكد من ذلك. 
لذلك سنرى بمزيد من التفصيل كل ما رأيناه من قبل. كان من الصعب شرح كل عنصر من عناصر MVC بالتفصيل دون رؤية القليل مما يتكون منه. لأنه بمجرد أن نتحدث عن البصر ، يجب أن نتحدث عن النموذج أو وحدة التحكم. بمجرد أن نتحدث عن وحدة التحكم ، تكون على الفور مسألة عرض ونموذج ... باختصار ، كل شيء مرتبط قليلاً ، من الأفضل أن تكون لديك بالفعل فكرة غامضة عن ماهية كل عنصر ، حتى لا تضيع في التفسيرات.
لنبدأ فورًا بالطرق التي شرحناها قليلًا جدًا ... نعم هذا صحيح ، لقد تحدثنا بالفعل عن الطرق في دراستنا حول Hello World . قلنا أن المسار جعل من الممكن تحويل عنوان URL إلى إجراء وحدة تحكم. بالفعل ! لقد تحققنا من ذلك! لكنها غير مكتملة بعض الشيء. تسمح لك الطرق بالقيام بأكثر من ذلك مع التفاصيل الدقيقة. 
دعونا نرى كيف يعمل ، وكما هو الحال دائمًا ، فإن الأفضل هو جعل يديك متسختين.

التوجيه routing


يتكون هذا الاسم البربري - وهو بالطبع اللغة الإنجليزية ... يمكننا ترجمته عن طريق "التوجيه" - في توجيه طلبات الزوار في تطبيق ASP الخاص بنا ASP. NET MVC .  وهذا ما نريد القيام به ، والتفاعل بشكل صحيح ، وربما بشكل مختلف اعتمادًا على ما يريد المستخدم القيام به بعناوين URL الخاصة بهم.
لقد رأينا أبسط شكل من أشكال التوجيه ، والذي تمت إضافته افتراضيًا بواسطة ASP.NET MVC . يعمل هذا على إنشاء وحدة تحكم وتنفيذ إجراء من تحليل عنوان URL هذا. دعنا نعود إلى هذا المسار الافتراضي.
للتذكير ، نجدها في ملف RouteConfig.cs ، الموجود في دليل App_Start ، والذي يتم استدعاؤه من قبل global.asax.cs ، نقطة الدخول لتطبيق ASP.NET وبالتالي يتم تنفيذه أولاً:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}
نجد شيئين هناك. هناك استدعاء للطريقة IgnoreRoute ، التي ستفهمها ، تسمح لك بتجاهل الطلبات التي تحتوي على النموذج / n- import-why.axd / n- import-why .
لاحظ أنني سأحدد عناوين URL لهذا الفصل دون إضافة بادئة إليها في كل مرة باستخدام http:// واسم الخادم.
في الواقع ، يتجاهل التوجيه المكالمات إلى الموارد التي يكون امتدادها axd ، ولا يهم إذا كان هناك شيء على التوالي. تشكل الطلبات باستخدام ملحق الامتداد طلبات لمعالجات HTTP لـ ASP.NET . لن نتحدث عن معالجات HTTP ، فقط اعلم أن هذه فئة يتم تنفيذها قبل أي معالجة من قبل موقع الويب ، قبل عرض الصفحة. يمكن استخدام هذا للحصول على موارد معينة ، مثل ملفات CSS أو JavaScript ، ولكن أيضًا لماذا لا يتم إنشاء صورة ديناميكيًا.
هنا في هذه الحالة ، الهدف هو تجاهل هذه الطلبات المحتملة ، حتى لا تتم معالجتها من قبل وحدات التحكم الخاصة بنا ، وأن تتبع دورة حياتها الخاصة.
دعنا نترك هذا جانبًا وننتقل إلى السطر التالي الذي سيكون ذا أهمية خاصة بالنسبة لنا:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
كما رأينا بالفعل  ، يسمح لك هذا المسار ، المسمى " Default" ، بالرد على طلبات النوع / xxx / yyy / zzz . ستقوم هذه الطلبات بإنشاء وحدة التحكم xxxController ، واستدعاء الطريقة yyy() ، وتمريرها المُدخل zzz  . وبالتالي ، فإن /Home/Index/123 سوف يستدعي الطريقة التالية:

public class HomeController : Controller
{
    public string Index(string id)
    {
        return "HomeController.Index " + id;
    }
}
سيؤدي ذلك إلى عرض سلسلة HomeController.Index 123 .

ملاحظة: تذكر أنني هنا أستخدم بنية تسمح بعرض سلسلة بسيطة دون المرور بطريقة عرض ، عن طريق إرجاع سلسلة. هذا لتبسيط الكود ، ولكن بالطبع في حالة حقيقية ، سيكون عليك عرض طريقة عرض.
هذا هو نمط الطريق {تحكم} / {العمل} / {معرف} ( {controller}/{action}/{id}) لوضع تلقائيا القيمة  Home  في الخاصية controller ، ووضع  Index  في الخاصية  action   و 123  في الخاصية id  .

لقد رأيت أيضًا أنه من الممكن أن يكون لديك قيم افتراضية ، بفضل الخاصية defaults   التي ، إذا كانت قيمة وحدة التحكم غائبة ، ستستبدلها بـ Home  ؛ وبالمثل action   لمن يستحق افتراضيا Index  . أما بالنسبة للمعرف ، فسيكون له قيمة مُدخل اختياري ، ممثلة بالفئة UrlParameter   التي هي فئة فارغة تقريبًا.
ملاحظة: قلت في الجزء السابق أن المُدخل مساو null  . في الواقع ، يأخذ قيمة الفئة الاختيارية في التوجيه وفي النهاية ، في طريقة تحكمنا ، يكون المعرف يستحق null .
وبالتالي ، فإن /Home/Index يكافئ /Home ويعادل أيضًا / .

أضيف طبقة أخرى من التاريخ للتأكد من أن الجميع يفهم ... ماذا سيفعل الطريق التالي: /Index ? ستستدعي
طريقة  Index التحكم IndexController ... التي لا وجود لها! نعم ، أنا متأكد من أنك لم تكن مخطئًا. Index  ما يعادل /Index/Index  . المُدخل controller   صالحة Index ، الإجراء غير موجود ، لذلك action   يتم تعيين المُدخل لقيمتها الافتراضية ؛ نفس الشيء مع المُدخل id  .

انتباه ، المعرف id   هو سلسلة أحرف في طريقتنا. من الممكن جعله عددًا صحيحًا (أو غيره) عن طريق تغيير نوع المُدخل:

public class HomeController : Controller
{
    public string Index(int id)
    {
        return "HomeController.Index " + id;
    }
}
وبالتالي ، فإن المسار التالي http://localhost:49874/Home/Index/123 سيعرض HomeController.Index 123 ولكن من ناحية أخرى ، فإن المسار التالي http://localhost:49874/Home/Index/Nicolas سيؤدي إلى الاستثناء التالي:
يحتوي قاموس المُدخلات على إدخال Null للمُدخل غير القابل للإلغاء "id" من النوع "System.Int32" للأسلوب "System.String Index (Int32)" في "DemoRoutes.Controllers.HomeController" . يجب أن يكون المُدخل الاختياري نوع مرجع أو نوعًا لاغياً أو أن يتم الإعلان عنه كمُدخل اختياري.
اسم المُدخل: parameters
هذا يعني أن ASP.NET MVC قد اكتشف أن سلسلة Nicolas لم تكن قابلة للتحويل إلى الكل. فجأة ، مررت المُدخل الافتراضي (أي UrlParameter.Optional  ) إلى الأسلوب Index ، وهو غير متوافق مع int   غير قابلة للإلغاء. لتتمكن من الحصول على مُدخل عدد صحيح اختياري ، يجب عليك استخدام بناء الجملة التالي واستخدام عدد صحيح فارغ:

public class HomeController : Controller
{
    public string Index(int? id)
    {
        return "HomeController.Index " + id;
    }
}
هذه المرة ، لن يؤدي مسار http://localhost:49874/Home/Index/Nicolas إلى زيادة الاستثناء ، ولكن ASP.NET MVC سيظل غير قادر على تحويل سلسلة Nicolas بأكملها ، وهذا أمر طبيعي أنا لست رقمًا! 
وهي في الواقع القيمة الاختيارية التي يتم تمريرها إلى الطريقة id   وبالتالي ستكون قيمتها null  .

إنشاء طرق


بالطبع ، يسمح لنا ASP.NET MVC بتسامحه الكبير ، بإنشاء مساراتنا الخاصة ، أو حتى تعديل المسار الافتراضي إذا لم نرغب في ذلك. ونعم ، تخيل أنني أرغب في تمرير أكثر من مُدخل إلى طريقي على سبيل المثال عن طريق تصفح URL / Home / Index / Nicolas / Delphine . إذا جربت التجربة ، فلن تتمكن آلية التوجيه لـ ASP.NET MVC من العثور على الإحالة الصحيحة وستُظهر خطأ 404 ، والذي يتوافق مع الخطأ الذي يشير إلى عدم وجود موارد في الموقع المطلوب.
على سبيل المثال ، تخيل أننا نريد استخدام تطبيق الويب الخاص بنا كآلة حاسبة وأن عنوان URL /Add/5/11 التالي يعرض النتيجة (غير المنشورة بدرجة كبيرة) من 16. فقط استبدل المسار بـ:

routes.MapRoute(
    name: "Default",
    url: "{action}/{valeur1}/{valeur2}",
    defaults: new { controller = "Calculateur", action = "Ajouter", valeur1 = 0, valeur2 = 0 });
بالطبع ، ستحتاج إلى إنشاء وحدة التحكم CalculateurController والطريقة التالية Ajouter :

public class CalculateurController : Controller
{
    public string Ajouter(int valeur1, int valeur2)
    {
        int resultat = valeur1 + valeur2;
        return resultat.ToString();
    }
}
 انتقل إلى /Add/5/11 وستحصل على النتيجة 16.
وماذا سيُرجع الطريق(Route) / ؟
بالطبع 0، هل تابعت بشكل جيد ؟ Action تأخذ القيمة الافتراضية Ajouter ، valeur1   و valeur2   كلا يأخذ القيمة 0. و 0 + 0، فإنه يجعل الصفر كذلك الموقع السابق الذي يحمل نفس الاسم!
هيا ، من أجل المتعة ، دعنا نضيف طرحًا صغيرًا في وحدة التحكم لدينا:

public class CalculateurController : Controller
{
    public string Ajouter(int valeur1, int valeur2)
    {
        int resultat = valeur1 + valeur2;
        return resultat.ToString();
    }

    public string Soustraire(int valeur1, int valeur2)
    {
        return (valeur1 - valeur2).ToString();
    }
}
وبالتالي ، سيعود المسار /Soustraire/10/4  بدون مفاجأة 6.
بالطبع ليس من الإلزامي الحفاظ على / لفصل أجزاء عنوان URL . يمكنك استخدام المحدد الذي تريده طالما لم يتم العثور على جزأين جنبًا إلى جنب ، مما يجعل تمايزها مستحيلًا. على سبيل المثال ، يمكننا القيام بمسار مثل هذا:

routes.MapRoute(
    name: "Default",
    url: "Calculatrice-{action}/{valeur1}-{valeur2}",
    defaults: new { controller = "Calculateur", action = "Ajouter", valeur1 = 0, valeur2 = 0 });
والتي بالطبع ستعمل مع الطريق: /Calculatrice-Ajouter/2-4
ولكن من المستحيل بالطبع القيام بذلك:

routes.MapRoute(
    name: "Default",
    url: "{action}{valeur1}-{valeur2}",
    defaults: new { controller = "Calculateur", action = "Ajouter", valeur1 = 0, valeur2 = 0 });
كيفية تحديد مكان انتهاء الإجراء وأين تبدأ القيمة؟ إلى جانب ذلك ، يشير ASP.NET MVC إلينا بالخطأ التالي:
لا يمكن أن يحتوي مقطع المسار على مُدخلين متتاليتين. يجب أن تكون مفصولة بعلامة "/" أو بسلسلة حرفية.
بشكل عام ، ستظل تميل إلى استخدام / كفاصل لأن العين البشرية تراها جيدًا وتستنتج مباشرةً الفصل بين المصطلحين. وبالمثل ، فإن محركات البحث مغرمة بأجزاء مفصولة بـ / .

تحديد مسارات متعددة


من الممكن تحديد عدة طرق لتطبيق ASP.NET MVC . تخيل أنه بالإضافة إلى معرفة كيفية إضافة الأرقام ، أردنا أن يعرف تطبيقنا كيفية إنشاء طريقة تحكم كما كان من قبل. يكفي سلسلة الطرق ، على سبيل المثال:

routes.MapRoute(
    name: "Ajouter",
    url: "Ajouter/{valeur1}/{valeur2}",
    defaults: new { controller = "Calculateur", action = "Ajouter" });

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
وبالتالي ، إذا انتقلنا إلى عنوان URL التالي: / Add / 4/7 فسوف نحصل على النتيجة 11. ثم إذا انتقلنا إلى / Home / Index / 123 ، فسوف نحصل على النتيجة السابقة ، وهي: HomeController.Index 123
من ناحية أخرى ، انتبه إلى الأمر!

الترتيب الذي نضيف فيه تعريفات المسار مهم ويحدد الترتيب الذي سيتم فيه اختبار المسارات المختلفة. لذا ، بهذا الترتيب ، عندما نحاول الانتقال إلى /Ajouter/4/7، فسيحاول بالفعل تحديد المسار Ajouter  . يقابل ذلك ، نتوقف عند هذا الحد ونطلق Ajouter   عليه طريقة التحكم Calculateur  .
عندما ننتقل إلى / Home / Index / 123 ، نحاول تحديد المسار Ajouter  الذي لا يعمل ، لذلك ننتقل بعد ذلك إلى الطريق Default  . هذه المرة يمر.

إذا قمنا بعكس ترتيب المسارين ، عند الطلب /Ajouter/4/7 ، سيحاول ASP.NET MVC إنشاء وحدة تحكم Ajouter   غير موجودة وسيؤدي ذلك إلى حدوث خطأ يمنع المسار التالي من أن يكون حلل.
بشكل عام ، يجب أن تبدأ دائمًا بإضافة المسار الأكثر تحديدًا للانتهاء من المسار الأكثر عمومية.

لا تزال هذه المسارات المتعددة عملية ، سنكون قادرين على استخدامها في مثالنا الجديد حيث نريد أن نكون قادرين على عرض الطقس ليوم محدد ولكن أيضًا قادرون على القيام بأشياء أخرى. باختصار ، القدرة على التفاعل في نفس الوقت مع طرق مثل هذه:
  • jour/mois/annee 
  • controller/action/id 
ممتاز ، مع الطرق المتعددة ، سأكون قادرًا على تحديد شيء مثل هذا:

routes.MapRoute(
    name: "Meteo",
    url: "{jour}/{mois}/{annee}",
    defaults: new { controller = "Meteo", action = "Afficher" });

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
مع وحدة تحكم Meteo تم إنشاؤها حديثًا:

public class MeteoController : Controller
{
    public string Afficher(int jour, int mois, int annee)
    {
        return "Il fait soleil le " + jour + "/" + mois + "/" + annee;
    }
}
حسنًا لا! لا يعمل. يمكن لـ ASP.NET عرض المسار بسهولة /23/3/2013 ولكن ليس المسار /Home/Index/123… أستطيع أن أشعر بذلك ، تشعر بخيبة أمل ويمكن أن تكون ... أعدك بأشياء رائعة!

قيود الطرق


لحسن الحظ ، لدى ASP.NET MVC أكثر من حيلة واحدة في جعبتها وسوف تسمح لنا بتحديد القيود على عناصر المسار. على سبيل المثال ، عرض الطقس ليوم محدد يمكن أن يعمل فقط مع الأرقام. بالطبع ، ليس من المنطقي عرض الطقس من Home/Index…
يكفي أن نقول أن المسار Meteo   لا يقبل الأعداد الصحيحة إلا لمُدخلات اليوم والشهر والسنة. ويتم ذلك من خلال التعبيرات العادية. على سبيل المثال ، للسماح بالأرقام فقط ، استخدم التعبير العادي فقط \d+   (يتطلب + وجود رقم واحد على الأقل) . لذلك يمكننا تحديد القيود بفضل الخاصية constraints   :

routes.MapRoute(
    name: "Meteo",
    url: "{jour}/{mois}/{annee}",
    defaults: new { controller = "Meteo", action = "Afficher" },
    constraints: new { jour = @"\d+", mois = @"\d+", annee = @"\d+" });
سيؤثر ذلك على ضمان أن المسار صالح فقط عندما تكون المُدخلات كلها أعداد صحيحة. إذا لم يكن الأمر كذلك ، فإن ASP.NET MVC يتخطى هذا المسار وينتقل إلى المسار التالي. وبالتالي ، لن يعد الآن /Home/Index/123 يستوفي شروط المسار Meteo   ، وبالتالي يمكنه الذهاب ومعرفة ما إذا كان المسار التالي صالحًا وبالتالي إنشاء وحدة التحكم الخاصة بنا Home   وتنفيذ الطريقة  Index  كما كان من قبل.
جيد جدا ، أليس كذلك؟ 
بالطبع ، يمكنك التفكير في جميع القيود التي تريدها والتي تسمح بالتعبيرات العادية. (أو ما يسمح لك بمعرفة التعبيرات العادية وهو موضوع واسع لن أتناوله هنا) . يمكننا التفكير جيدًا في تشديد القيود قليلاً على مدار العام. بعد كل شيء ، السنة هي بالضرورة 4 أرقام ... خاصة في الوقت الحاضر ... هيا ، قف ، يتطلب القيد التالي 4 أرقام بالضبط للسنة:

routes.MapRoute(
    name: "Meteo",
    url: "{jour}/{mois}/{annee}",
    defaults: new { controller = "Meteo", action = "Afficher" },
    constraints: new { jour = @"\d+", mois = @"\d+", annee = @"\d{4}" });
وبالتالي ، فإن الطريق / 23/3/2013 سيعمل ، بينما الطريق / 23/3/999 لن يكون جيدًا. إذا كنت لا تعرف القوة الكاملة للتعبيرات العادية ، فلا يسعني إلا أن أشجعك على البحث عنها على أي حال ، مع ذلك ، سيتم تسليحك بحيث يكون لعناوين URL الخاصة بك الرأس الذي تريده بالضبط.

إدارة أي عدد من المُدخلات


بالإضافة إلى ذلك ، من الممكن معالجة الطلبات التي تحتوي على عدد متغير من المقاطع. رأينا على سبيل المثال أنه باستخدام المسار الافتراضي ، يعمل عنوان URL من هذا النوع: /Home/Index/123 ، حيث يعمل على إنشاء وحدة تحكم Home   واستدعاء الطريقة Index   بتمريرها بقيمة  id   123 . من ناحية أخرى ، فإن عنوان URL يحتوي على المزيد من الأجزاء لا يعمل ، مثل : /Home/Index/123/456 .
ومع ذلك ، من الممكن معالجة هذا النوع من عناوين URL باستخدام العلامة النجمية (*) ، مع المُدخل الأخير. إنه يشير إلى أننا نريد اعتراض كل ما تبقى. أضف المسار التالي لهذا:

routes.MapRoute(
    name: "RouteAttrapeTout",
    url: "{controller}/{action}/{*id}",
    defaults: new { controller = "Accueil", action = "Index", id = UrlParameter.Optional }
);
مع ذلك ، إذا انتقلت إلى URL / Home / Index / 123/456 ، فسيكون المعرّف هو "123/456" . بالطبع ، يتطلب ذلك أن يكون مُدخل id   وحدة التحكم من نوع السلسلة ، لأنه لا يمكن تحويل 123/456 إلى عدد صحيح. بعد ذلك ، أنت حر في فعل ما تريد مع هذه السلسلة. 

إنشاء طرق


تتمثل إحدى مزايا آلية التوجيه هذه في أنها تجعل من السهل إنشاء عنوان URL بفضل اسم وحدة التحكم والإجراء. سيكون هذا مفيدًا على سبيل المثال عندما نريد عمل روابط بين الصفحات باستخدام العلامة   .
لذا ، بدلاً من كتابة رابط مباشر مثل هذا ، <a href="/Home/Afficher/123">…</a>   يمكننا استخدام عنصر يقوم بإنشاء عنوان URL الصحيح بناءً على آلية التوجيه.

لا يمكنني توضيح ذلك لك في الوقت الحالي لأننا لم نستكشف المشاهدات ولا سيما مساعدي HTML .
مؤقتًا ، ولإرضاء فضولك ، سأنشئ رابطًا على جانب وحدة التحكم باستخدام طريقة تعمل على نفس المبدأ:

public string Index(string id)
{
    return HtmlHelper.GenerateLink(Request.RequestContext, RouteTable.Routes, "Mon lien", null, "Afficher", "Home", new RouteValueDictionary { { "id", id } }, null);
}
وبالتالي ، ستعرض هذه الطريقة سلسلة HTML التالية:

<a href="/Home/Afficher/123">Mon lien</a>
تلقائيًا ، من اسم وحدة التحكم وعملها ومعلماتها ، أنشأ ASP.NET MVC عنوان URL ثابتًا. هذا يجعل من الممكن تجنب كتابة عناوين URL بشدة في الصفحات والمخاطرة بأنها لا تعود إلى أي شيء إذا قمنا بتغيير قواعد التوجيه ...

هنا ، نترك لـ ASP.NET MVC رعاية إدارة عناوين URL لنا.
لاحظ أنه إذا حاولت إنشاء عنوان URL لإجراء Index   وحدة التحكم Home  ، فسيكون لدينا الرابط التالي:

<a href="/Home">Mon lien</a> 
ستلاحظ أن آلية التوجيه لا تعيد اسم الإجراء ، لأنه اختياري. يمكن أن تكون قد ولدت فقط a / ، والتي كانت ستعادل.
انتقل إلى فصل تالٍ لرؤية إنشاء المسارات التي تعمل في طرق العرض. 

ماذا عن إعادة كتابة URL؟


غالبًا ما يتم الخلط بين توجيه URL وإعادة كتابة URL من قبل المبتدئين. لديهم ميزة مشتركة ، وهي أنها تسمح بعناوين URL التي يمكن قراءتها بسهولة أكبر من قبل البشر ، مما يسمح لنا بالعثور على طريقنا في تعرجات موقع الويب.

إعادة كتابة عنوان URL هي آلية لتحويل عنوان URL إلى آخر. بشكل عام ، الغرض من إعادة كتابة عنوان URL هو تحسين المراجع الطبيعية للصفحة وهو جزء من مبادئ تحسين محركات البحث.
يشير SEO إلى تحسين محركات البحث ويترجم إلى تحسين محركات البحث. إنها مجموعة من التقنيات التي تهدف إلى تحسين وضع موقعك في محركات البحث من خلال تزويدهم بالمعلومات ذات الصلة حول محتوى الصفحات التي يزورونها. يمكن أن يساعد عنوان URL الواضح الذي يحتوي على كلمات رئيسية دقيقة ويتعلق بموضوع الصفحة في تحسين مرجعيته الطبيعية.

لذا ، تخيل موقعًا للتجارة الإلكترونية يعرض المنتجات. يبدو من المنطقي تمامًا أن يتم ربط المسار بعرض ورقة المنتج ، مع أخذ معرف المنتج كمُدخل. شيء من هذا القبيل : /Produits/Affiche/xyz123 .
مبدأ إعادة كتابة عنوان URL هو التأكد من أنه عند إدخال عنوان URL ، على سبيل المثال /informatique/livres/apprendre-ASP-NET-MVC/pas-cher ، يتم تحويله إلى عنوان URL آخر ، على سبيل المثال /Produits/Affiche/xyz123  بالطبع لعرض الصفحة الصحيحة. سيسهل ذلك على المستخدمين معرفة أن الارتباط يشير إلى صفحة منتج لكتاب رخيص على ASP.NET MVC . وبالمثل ، ستتمكن محركات البحث من استخدام الكلمات الرئيسية لعنوان URL للرد بطريقة مناسبة على بحث في كتاب رخيص على ASP.NET MVC .

وبالتالي ، يجب استخدام عنوان URL لإعادة الكتابة بالإضافة إلى عنوان URL الخاص بالتوجيه.

باختصار


  • التوجيه عبارة عن آلية تصل إلى أعلى طلب HTTP مما يجعل من الممكن توجيه إجراء المستخدم نحو طريقة تحكم بشكل صحيح.
  • من الممكن إنشاء مساراتك الخاصة وأيضًا إضافة قيود المسار ، في شكل تعبيرات عادية.
  • يختلف عنوان URL لإعادة الكتابة عن عنوان URL التوجيه ويمكن استخدامه بالإضافة.