كيف يمكنني تحديد التقاط كل مسار لموقع ASP.NET MVC؟

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

  •  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() }
);

في هذه الطريقة أنها لن تتداخل مع الخاص بك طرق محددة أخرى.

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