2008-10-20 11 views
8

मेरे पास श्रेणियों में टैग किए गए लेखों के साथ एक समाचार साइट है।मैं एएसपी.नेट एमवीसी साइट के लिए कैच-ऑल रूट कैसे परिभाषित करूं?

मेरे नियंत्रक कहा जाता है "श्रेणी" और इस यूआरएल:

http://mysite.com/Category/Sport

नियंत्रक Category में कार्रवाई करने के लिए IndexSport गुजरता है।

मैं निम्न URL अनुमति देना चाहते हैं:

http://mysite.com/Sport/Hockey
http://mysite.com/Sport/Football
http://mysite.com/Science/Evolution

कौन सा नियंत्रक Category में कार्रवाई Index करने के लिए सभी श्रेणी जानकारी गुजरता है।

मैं कैच-ऑल रूट कैसे बना सकता हूं जो इन सभी को संभालता है और उन्हें श्रेणी में बंद करता है?

उत्तर

2

इन पंक्तियों here के साथ मेरे प्रश्न के लिए एक बहुत अच्छी प्रतिक्रिया है। कि आप किसी भी मार्ग से ऊपर सभी मार्गों के लिए उपयोग किया जाएगा (कर सकते हैं मत करो नहीं

public class CategoryController : Controller 
{ 
    public ActionResult Display(string category, string subcategory) 
    { 
     // do something here. 
    } 
} 

: अपने नियंत्रक में

routes.MapRoute("Default", "{category}/{subcategory}", 
    new { controller = "CategoryController", action = "Display", id = "" } 
); 

और उसके बाद:

+0

jmcd hanks ... जो मुझे सही रास्ते पर मिला और मैंने बाकी को समझ लिया। (stackoverflow महान है) – WayneDV

+2

लिंक केवल उत्तर ही एसओ पर निराश हैं। – spender

0

आप इस तरह यह कर सकते हैं एक पृष्ठ के बारे में आदि जब तक आप उपरोक्त से पहले स्पष्ट मार्ग निर्दिष्ट नहीं करते हैं)।

हालांकि आप केवल मौजूदा श्रेणियों के लिए मार्ग सीमित करने के लिए एक कस्टम बाधा शामिल कर सकते हैं।

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

कि जिस तरह से यह अपने अन्य परिभाषित मार्गों के साथ हस्तक्षेप नहीं होगा।