كيف يمكنني تحديد التقاط كل مسار لموقع ASP.NET MVC؟
-
03-07-2019 - |
سؤال
ولدي موقع إخباري مع المقالات المميزة في فئات.
ويسمى وحدة تحكم الكمبيوتر "الفئة" وURL هذا:
<اقتباس فقرة> وhttp://mysite.com/Category/Sport
ويمر Sport
إلى Index
العمل في وحدة التحكم Category
.
وأريد أن تسمح للعناوين التالية:
<اقتباس فقرة> وhttp://mysite.com/Sport/Hockey
http://mysite.com/Sport/Football
http://mysite.com/Science/Evolution
والذي يفوق كل المعلومات فئة لIndex
العمل في وحدة التحكم Category
.
وكيف أقوم بإنشاء التقاط كل الطريق الذي يعالج كل هذه ويتردد عليهم الفئة؟
المحلول
وهناك استجابة جيدة جدا لسؤالي على طول هذه الخطوط <لأ href = "https://stackoverflow.com/questions/19941/aspnet-mvc-catch-exception-when-non-existant-controller-is-requested "> هنا .
نصائح أخرى
ويمكنك القيام بذلك من هذا القبيل:
routes.MapRoute("Default", "{category}/{subcategory}",
new { controller = "CategoryController", action = "Display", id = "" }
);
وبعد ذلك في جهاز تحكم:
public class CategoryController : Controller
{
public ActionResult Display(string category, string subcategory)
{
// do something here.
}
}
لا أن أي طريق سوف تستخدم أعلاه لجميع الطرق (يمكنك يكن لديك معلومات عن الصفحة وما إلى ذلك إلا إذا كنت تحديد مسارات واضحة من قبل واحد أعلاه).
ولكن هل يمكن أن تشمل عائقا مخصصة للحد من الطريق إلى فئات فقط القائمة. شيء من هذا القبيل:
public class OnlyExistingCategoriesConstraint : IRouteConstraint
{
public bool Match
(
HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection
)
{
var category = route.DataTokens["category"];
//TODO: Look it up in your database etc
// fake that the category exists
return true;
}
}
والتي تستخدمها في طريقك مثل هذا:
routes.MapRoute("Default",
"{category}/{subcategory}",
new { controller = "CategoryController", action = "Display", id = "" },
new { categoryExists = new OnlyExistingCategoriesConstraint() }
);
في هذه الطريقة أنها لن تتداخل مع الخاص بك طرق محددة أخرى.