توجيه Asp.Net:كيف يمكنني تجاهل مسارات البدل المتعددة؟

StackOverflow https://stackoverflow.com/questions/30302

سؤال

أرغب في تجاهل مسارات البدل المتعددة.مع asp.net mvc Preview 4، يتم شحنها مع:

RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

أود أيضًا أن أضيف شيئًا مثل:

RouteTable.Routes.IgnoreRoute("Content/{*pathInfo}");

ولكن يبدو أن هذا يعطل بعض المساعدين الذين يقومون بإنشاء عناوين URL في برنامجي.أفكار؟

هل كانت مفيدة؟

المحلول

هناك حلان ممكنان هنا.

  1. أضف قيدًا إلى مسار التجاهل للتأكد من أن الطلبات التي يجب تجاهلها فقط هي التي ستطابق هذا المسار.كيندا kludgy، ولكن يجب أن تعمل.

    RouteTable.Routes.IgnoreRoute("{folder}/{*pathInfo}", new {folder="content"});
    
  2. ماذا يوجد في دليل المحتوى الخاص بك؟افتراضيًا، لا يقوم التوجيه بتوجيه الملفات الموجودة على القرص (في الواقع يتحقق من VirtualPathProvider).لذا، إذا كنت تضع محتوى ثابتًا في دليل المحتوى، فقد لا تحتاج إلى مسار التجاهل.

نصائح أخرى

قد يكون هذا أمرًا صعبًا للغاية.

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

نظرًا لأن المعلومات المطلوبة للمسار "Content/{*pathInfo}" تكون مستوفاة تمامًا دائمًا (لا توجد بيانات مطلوبة على الإطلاق في هذا المسار)، وهي قريبة من أعلى قائمة المسارات، فإن كل محاولاتك للتعيين إلى مسارات غير مسماة سوف تطابق هذا النمط، وستعتمد جميع عناوين URL الخاصة بك على هذا ("Content?action=foo&controller=bar")

لسوء الحظ، لا توجد طريقة للتغلب على هذا من خلال طرق العمل.إذا كنت تستخدم مسارات مسماة (على سبيل المثال، اختيار Html.RouteLink بدلاً من Html.ActionLink)، فيمكنك تحديد اسم المسار الذي تريد مطابقته.إنها أقل ملاءمة، ولكنها أكثر دقة.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top