سؤال

لدينا موقع على شبكة الانترنت التي تتعامل مع الفنانين والأماكن ونحن نعمل على تطوير في ASP.net MVC.

ودينا وجهات نظر الفنان لدينا في مجلد (المشاهدات / الفنانين / ..)، وArtistsController، ArtistsRepository والتمسك أسماء الإجراءات REST مثل مشاهدة، الجديدة، حذف الخ.

وعندما وسخر أولا في الموقع، كل شيء يعمل بشكل جيد في بيئة اختبار لدينا ب URLs الاختبار كانت / فنانين / إظهار / 1209 ولكن نحن بحاجة إلى تغيير هذا بحيث يظهر الموقع و/ فنانين / مادونا و/ فنانين / فو فايترز الخ

ولكن، كيف يمكننا أن نميز بين أسماء الفنان صحيحة وأسماء من الإجراءات لأن وحدة التحكم ؟! على سبيل المثال، الفنانين / PostComment أو الفنانين / DeleteComment؟ ولست بحاجة للسماح التوجيه للتعامل مع هذا. لدينا الافتراضي عرض الطريق هو:

routes.MapRoute(
               "ArtistDefault",
               "artists/{artistName}",
               new { controller = "Artists", action = "Show", artistName = ""}

وطريقة واحدة لتجنب ذلك هي لموقعنا على الانترنت لتشغيل واضح على / الفنانين، ولكن لديها تحكم دينا تسميته إلى المفرد - ArtistController - مقابل ArtistsController. ومن شأن ذلك أن تتعارض مع الاتفاقيات تسمية ذهبنا مع عندما بدأنا (ولكن مهلا!).

هل لديك أي توصيات أخرى؟ إذا كان ذلك ممكنا يمكننا أيضا الطريق اعتمادا على الأفعال (حتى PostComment سيكون ما بعد ذلك نحن ربما الطريق إلى أن العمل)، ولكن لست متأكدا إذا كان هذا هو المستحسن ناهيك ممكن.

والشكر

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

المحلول

والمعلمة 4TH إلى MapRoute يسمح لك تحديد قيود للقيم. يمكنك إضافة توجيه قبل هذا واحد هو أن ل "الفنانين / {العمل} / {معرف}" مع قيود على القيم الصالحة للعمل؛ الفشل في مباراة واحدة من الإجراءات الخاصة بك، وأنها سوف تسقط حتى الطريق القادم والذي سوف تطابق لاسم الفنان.

نصائح أخرى

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

routes.MapRoute(
               "ArtistPostComment",
               "artists/PostComment/{id}",
               new { controller = "Artists", action = "PostComment", id = "" }
);
routes.MapRoute(
               "ArtistDeleteComment",
               "artists/DeleteComment/{id}",
               new { controller = "Artists", action = "DeleteComment", id = "" }
);
routes.MapRoute(
               "ArtistDefault",
               "artists/{artistName}",
               new { controller = "Artists", action = "Show", artistName = "" }
);               
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top