سؤال

أود الحصول على عناوين URL التي تكون أقصر من / {Controller} / {action} / {id}.

على سبيل المثال، أود {Controller} / {ID}، حيث {ID} هو سلسلة.

هذا من شأنه أن يسمح بمسارات بسيطة، مثل المستخدمين / اسم المستخدم، الصفحات / Pagename، News / Newsname. أحب هذا أفضل من طلب إجراء / التفاصيل في عنوان URL (المستخدمين / التفاصيل / اسم المستخدم)، وهو أقل أناقة للمستخدم النهائي.

يمكنني بسهولة إجراء هذا العمل عن طريق إعداد طرق مخصصة لأي وحدة تحكم أريد هذا المستوى من البساطة. ومع ذلك، يؤدي هذا الصداع عندما يتعلق الأمر بتنفيذ إجراءات أخرى، مثل {Controld} / {} / {action}، حيث {action} = "إنشاء"، لأنه في هذه الحالة، في هذه الحالة، تعارض السلسلة {itm} مع السلسلة {ID}.

سؤالي: كيف يمكنني الحصول على كلمات "محجوزة"، بحيث إذا كان عنوان URL / أخبار / إنشاء، فسيتم التعامل معه كإجراء، ولكن إذا كان عنوان URL هو أي شيء آخر، مثل / أخبار / A-Gorilla-ate-my- أطروحة، ثم يتم التعامل معها كمعرف.

آمل أن أتمكن من تحديد هذا عند إعداد طريقتي؟

تحديث:

باستخدام إجابة بن Griswold، قمت بتحديث طرق ASP.NET MVC الافتراضية:

    routes.MapRoute(
    "CreateRoute",                                            // route name
    "{controller}/Create",                                    // url with parameters
    new { action = "Create" }                                 // parameter defaults
);

routes.MapRoute(
    "DetailsRoute",                                           // route name
    "{controller}/{id}",                                      // url with parameters
    new { action = "Details" }                                // parameter defaults
);

routes.MapRoute(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

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

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

هذا حقا لطيف. إذا رأى أي شخص أن هناك شيئا خاطئا في هذا النهج، فينتهي في ذلك، لكني أحب ذلك حتى الآن.

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

المحلول

أعتقد أنك تركت مع إنشاء طريق لكل كلمة محفوظة. علي سبيل المثال،

routes.MapRoute("CreateRoute",
               "{controller}/Create",
                new { action = "Create" }
            );

سوف تتعامل مع / أخبار / إنشاء / إنشاء / المستخدمين / إنشاء، وما إلى ذلك طالما يتم سرد هذا الطريق قبل طريقك المخصص الآخر، أعتقد أنك مغطاة.

أتصور أنك ستحتاج إلى طرق إضافة لمختلف عمليات CRUD التي ستتبع نمط مماثل.

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