आपका मार्ग आदेश महत्वपूर्ण है। तो एक पहली मार्ग परिभाषा बनाएं जो सभी उपलब्ध नियंत्रकों को संभालती है और फिर एक का उल्लेख करें जो शेष अनुरोधों को संभालेगी। वहाँ आप
routes.MapRoute("Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" },
new { controller = new FromValuesListConstraint("Home", "Account","OtherOne") }
);
// to handle personalize user url
routes.MapRoute("user","{url}", new {controller="Home",action="Profile",url = "" });
अब FromValuesListContraint
नामक एक नया वर्ग जो IRouteConstraint
public class FromValuesListConstraint : IRouteConstraint
{
private string[] _values;
public FromValuesListConstraint(params string[] values)
{
this._values = values;
}
public bool Match(HttpContextBase httpContext, Route route, string parameterName,
RouteValueDictionary values, RouteDirection routeDirection)
{
// Get the value called "parameterName" from the
// RouteValueDictionary called "value"
string value = values[parameterName].ToString();
// Return true is the list of allowed values contains
// this value.
for (int i = 0; i < _values.Length; i++)
if (SContains(_values[i], value, StringComparison.OrdinalIgnoreCase))
return true;
return false;
}
public bool SContains(string source, string toCheck, StringComparison comp)
{
return source.IndexOf(toCheck, comp) >= 0;
}
}
से विरासत बनाने के घर में अपने Profile
कार्रवाई विधि पैरामीटर मान पढ़ी है अनुरोध की www.yousite.com/apple
तरह संभाल और से डेटा प्राप्त होगा अपने डेटाबेस।
public ActionResult Profile(string url)
{
//url variable will have apple or microsoft . You may get data from db and return a view now.
}
तो जब भी एक अनुरोध आता है, यह जाँच करेगा कि क्या यह एक नियंत्रक उपलब्ध है (जो आप अपने पहले मार्ग परिभाषा FromValuesListContraint वर्ग निर्माता में पारित कर दिया), तो उपलब्ध है अगर यह किसी और, कि मार्ग के लिए जाना होगा, यह दूसरे मार्ग के रूप में उल्लिखित सामान्य (डिफ़ॉल्ट) मार्ग के लिए जाएगा।
इस उदाहरण में, होम, खाता और अन्य लोग मेरे उपलब्ध नियंत्रक हैं। जब भी आप अपनी परियोजना में एक नया नियंत्रक जोड़ते हैं, तो आप इसे FromValuesListConstraint क्लास कन्स्ट्रक्टर के कन्स्ट्रक्टर में जोड़ना चाहते हैं।
बस यह कह रहा है कि यह कुछ विशिष्ट अपवाद को पकड़ने और सामान्य अपवाद पर जाने जैसा काम करता है यदि उनमें से कोई भी पकड़ा नहीं जाता है! :) (समझने के लिए सिर्फ एक उदाहरण)
संभव नहीं लगता है, क्योंकि आप www.example.com/logple से www.example.com/apple नहीं बता सकते हैं कि पहले एक ब्रांड आईडी है और दूसरा नियंत्रक है नाम। जब तक आप अपना खुद का कस्टम रूटिंग प्रदाता नहीं लिखते और जांचें कि वह हिस्सा ब्रांड या नियंत्रक का नाम होना चाहिए या नहीं।लेकिन राउटर के लिए ज्यादातर मामलों के लिए यह बहुत जटिल होगा ... – xandy