जैसा कि आपने बताया है, कैच-ऑल पैरामीटर केवल रूट के अंत में दिखाई दे सकता है - आपके द्वारा पोस्ट किया गया कोड एक रन-टाइम त्रुटि फेंक देगा और यदि आप दौड़ने का प्रयास भी करते हैं तो आपको मौत की पीली स्क्रीन दें आपका आवेदन।
कस्टम रूटिंग परिदृश्यों के निर्माण के लिए कई विस्तारशील बिंदुएं हैं। ये हैं - रूट, रूटबेस, और आईआरओटीएंडलर।
आप मार्गबेस को विस्तारित करके संभालने के लिए मार्गों की एक जेनरेट सूची बना सकते हैं। आम तौर पर आप एक कन्स्ट्रक्टर रखने के पैटर्न का पालन करेंगे जो संसाधन (नियंत्रक नाम) में लेता है, और उसके बाद इसे उन मार्गों की एक सूची निर्दिष्ट करता है, जिनके लिए यह जिम्मेदार था, और फिर इसे अपने वैश्विक.एक्सएक्स में मैप करना था।
public class MyRoute : RouteBase
{
private List<Route> _routes = new List<Route>();
public MyRoute(string resource)
{
// make a Resource property, not shown in this example
this.Resource = resource;
// Generate all your routes here
_routes.Add(
new Route("some/url/{param1}",
new McvRouteHandler {
Defaults = new RouteValueDictionary(new {
controller = resource,
action = actionName
}),
Constraints = new RouteValueDictionary()
);
_routes.Add(...); // another new route
}
public override RouteData GetRouteData(HttpContextBase context)
{
foreach (var route in _routes)
{
var data = route.GetRouteData(context);
if (data != null)
{
return data;
}
}
return null;
}
public override VirtualPathData GetVirtualPath(RequestContext context, RouteValueDictionary rvd)
{
foreach (var route in _routes)
{
var path = route.GetVirtualPath(context, rvd);
if (path != null)
{
return path;
}
}
return null;
}
}
अपने मार्ग वर्ग के लिए, अपने Global.asax में एक routes.Add(new MyRoute("page1"));
कार्य करें: यहाँ कुछ उदाहरण कोड आप से निर्माण कर सकते हैं।
यदि आपको और भी नियंत्रण की आवश्यकता है, तो आप उपरोक्त उदाहरण में दिखाए गए अनुसार अपने मार्गों के लिए आईआरओटीएंडलर() बनाने के बजाय, आईआरओटीएंडलर() बनाने के बजाय, अपने आईआरओटीएंडलर का उपयोग कर सकते हैं। यह आपको अनुरोध डेटा से नियंत्रक का चयन करने के तर्क को ओवरराइड करने की अनुमति देगा।
संपूर्ण ढांचा बेहद एक्स्टेंसिबल है, लेकिन आपको इसे ठीक से करने के लिए काफी कुछ सीखना होगा। अगर आप कर सकते हैं तो पकड़ने के सभी पैरामीटर का लाभ उठाने के लिए यदि संभव हो तो मैं बस आपके यूआरएल को फिर से व्यवस्थित करने का सुझाव दूंगा।
लोचदार। रूटिंग (https://github.com/lokiworld/Elastic.Routing) अंतर्निहित एमवीसी रूटिंग को बढ़ाता है और आपको अपने मार्ग के किसी भी सेगमेंट में कैच का उपयोग करने की क्षमता प्रदान करता है साथ ही कुछ अन्य अच्छा वैकल्पिक सेगमेंट की तरह सामान। – BrutalDev