2011-10-24 21 views
6

मैं जैसे URL है:इस रूटिंग को कैसे संभालें?

  • /en/ब्लॉग (पता चलता सिंहावलोकन या ब्लॉग प्रविष्टियों)
  • /en/ब्लॉग/ब्लॉग के साथ आइटम का भुगतान करती है-महान खाना बनाना और है-निष्पक्ष पुरस्कृत (से पता चलता urltitle)
  • /en/ब्लॉग/क्यों-बल्कि से अधिक आहार विशेषज्ञ-कुक (urltitle के साथ ब्लॉग आइटम)

मैं कितने अनुयायियों को परिभाषित किया है मार्गों के लिए पता चलता है

  • एक: मार्ग "एन/ब्लॉग"
  • C: रूट "एन/ब्लॉग/{urltitle}/{टिप्पणी पेज बाधा लेख पृष्ठ = @" \ d "
  • बी के साथ मार्ग" एन/ब्लॉग/{लेख पृष्ठ} " } "बाधा टिप्पणी पृष्ठ के साथ = @" \ d "
  • घ: मार्ग" एन/ब्लॉग/{urltitle} "

प्रश्न 1: यह ठीक काम करता है, लेकिन शायद वहाँ कम पटरियों के साथ एक बेहतर समाधान है?

प्रश्न 2: एक नया लेख जोड़ने के लिए, मैं ब्लॉग नियंत्रक में एक कार्रवाई विधि AddArticle है। बेशक, के साथ मार्गों ऊपर परिभाषित, यूआरएल "/ en/ब्लॉग/addarticle" मार्ग डी, जहां addarticle urltitle-जो निश्चित रूप से सही नहीं है किया जाएगा करने के लिए नक्शे होगा। इस मार्ग के लिए रास्ते में "कॉम/ब्लॉग/_ {कार्रवाई}"

और तो अब यूआरएल "/ en/ब्लॉग/_addarticle" फ़ोल्डर,:

  • ई: इसलिए मैं निम्नलिखित मार्ग जोड़ा और सही क्रिया विधि निष्पादित करें। लेकिन मैं सोच रहा था कि इसे संभालने का एक बेहतर तरीका है या नहीं?

    सलाह के लिए धन्यवाद।

+1

अच्छा सवाल। मैं वास्तव में किसी भी जवाब में रुचि रखते हैं। – Phil

+0

शायद कस्टम मार्ग बाधा सबसे सुरुचिपूर्ण समाधान हो सकता है? –

+0

ठीक है, प्रश्न 2 के लिए मुझे जवाब मिल गया। मैंने बहिष्कार कॉन्स्ट्रेन नामक एक कस्टम बाधा बनाई, और मार्ग डी को बदल दिया: मार्ग "एनएल/ब्लॉग/{urltitle}" बाधा के साथ "नया {urltitle = नया बहिष्कार कॉन्स्ट्रेन (नई सूची () {" addarticle "," addcomment "," gettags "})}));"। अब, मेरा यूआरएल साफ रहता है, जैसे कि/nl/blog/addcomment –

उत्तर

4

मेरे अपने प्रश्नों के उत्तर:

public class IsOptionalOrMatchesRegEx : IRouteConstraint 
{ 
    private readonly string _regEx; 

    public IsOptionalOrMatchesRegEx(string regEx) 
    { 
     _regEx = regEx; 
    } 

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 
     var valueToCompare = values[parameterName].ToString(); 
     if (string.IsNullOrEmpty(valueToCompare)) return true; 
     return Regex.IsMatch(valueToCompare, _regEx); 
    } 
} 

फिर, अंक ए और बी एक मार्ग में overexpressed जा सकता है::

    एक सवाल के लिए, मैं एक कस्टम बाधा IsOptionalOrMatchesRegEx बनाया

  • यूआरएल: "कॉम/ब्लॉग/लेख {पेज}"
  • मूलभूत मूल्यों: नए लेख पेज = {UrlParameter।वैकल्पिक}
  • की कमी: नए {articlepage = नए IsOptionalOrMatchesRegEx (@ "\ d")

प्रश्न 2 के लिए, मैं एक ExcludeConstraint बनाया:

public class ExcludeConstraint : IRouteConstraint 
{ 
    private readonly List<string> _excludedList; 

    public ExcludeConstraint(List<string> excludedList) 
    { 
     _excludedList = excludedList; 
    } 

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 
     var valueToCompare = (string)values[parameterName]; 
     return !_excludedList.Contains(valueToCompare);    
    } 
} 

मार्ग डी तो तरह बदला जा सकता है:

  • यूआरएल: "nl/ब्लॉग/{urltitle}"
  • की कमी: नए {urltitle = नए ExcludeConstraint (नई सूची() { "एक ddarticle "," addcomment "," gettags "})});
संबंधित मुद्दे