/ / एएसपी.नेट एमवीसी रूट के लिए अनंत यूआरएल पैरामीटर - asp.net, asp.net-mvc, asp.net-mvc-3, asp.net-mvc-routing

एएसपी.नेट एमवीसी रूट के लिए अनंत यूआरएल पैरामीटर - asp.net, asp.net-mvc, asp.net-mvc-3, asp.net-mvc-routing

मुझे एक कार्यान्वयन की आवश्यकता है जहां मैं अपने एएसपी.NET नियंत्रक पर अनंत पैरामीटर प्राप्त कर सकता हूं। यदि मैं आपको एक उदाहरण देता हूं तो यह बेहतर होगा:

आइए मान लें कि मेरे पास यूआरएल का पालन करना होगा:

example.com/tag/poo/bar/poobar
example.com/tag/poo/bar/poobar/poo2/poo4
example.com/tag/poo/bar/poobar/poo89

जैसा कि आप देख सकते हैं, इसके बाद टैग की अनंत संख्या मिल जाएगी example.com/tag/ और स्लैश यहां एक delimiter होगा।

नियंत्रक पर मैं यह करना चाहता हूं:

foreach(string item in paramaters) {

//this is one of the url paramaters
string poo = item;

}

क्या यह हासिल करने के लिए कोई ज्ञात तरीका है? मैं नियंत्रक से मूल्यों तक कैसे पहुंच सकता हूं? साथ में Dictionary<string, string> या List<string>?

ध्यान दें :

प्रश्न आईएमओ को अच्छी तरह से समझाया नहीं गया है, लेकिन मैंने इसे फिट करने के लिए अपनी पूरी कोशिश की। अंदर इसे ट्विक करने के लिए स्वतंत्र महसूस करें

उत्तर:

उत्तर № 1 के लिए 55

इस कदर:

routes.MapRoute("Name", "tag/{*tags}", new { controller = ..., action = ... });

ActionResult MyAction(string tags) {
foreach(string tag in tags.Split("/")) {
...
}
}

जवाब के लिए 26 № 2

पकड़ने से आपको कच्ची स्ट्रिंग मिल जाएगी। यदि आप डेटा को संभालने के लिए एक और अधिक शानदार तरीका चाहते हैं, तो आप हमेशा कस्टम रूट हैंडलर का उपयोग कर सकते हैं।

public class AllPathRouteHandler : MvcRouteHandler
{
private readonly string key;

public AllPathRouteHandler(string key)
{
this.key = key;
}

protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var allPaths = requestContext.RouteData.Values[key] as string;
if (!string.IsNullOrEmpty(allPaths))
{
requestContext.RouteData.Values[key] = allPaths.Split("/");
}
return base.GetHttpHandler(requestContext);
}
}

मार्ग हैंडलर पंजीकृत करें।

routes.Add(new Route("tag/{*tags}",
new RouteValueDictionary(
new
{
controller = "Tag",
action = "Index",
}),
new AllPathRouteHandler("tags")));

नियंत्रक में सरणी के रूप में टैग प्राप्त करें।

public ActionResult Index(string[] tags)
{
// do something with tags
return View();
}

जवाब के लिए 10 № 3

वह कहा जाता है सबको पकड़ो:

tag/{*tags}

जवाब के लिए 5 № 4

अगर कोई भी .NET 4.0 में एमवीसी के साथ इस पर आ रहा है, तो आपको सावधान रहना होगा कहा पे आप अपने मार्गों को परिभाषित करते हैं। मैं खुशी से जा रहा था global.asax और इन उत्तरों में सुझाए गए मार्गों को जोड़ना (और अन्य ट्यूटोरियल्स में) और कहीं भी नहीं मिल रहा है। मेरे मार्ग सभी बस के लिए डिफ़ॉल्ट {controller}/{action}/{id}। यूआरएल में और सेगमेंट जोड़ने से मुझे 404 त्रुटि मिली। तब मैंने App_Start फ़ोल्डर में RouteConfig.cs फ़ाइल की खोज की। यह पता चला है कि इस फाइल को बुलाया जाता है global.asax में Application_Start() तरीका। तो, .NET 4.0 में, सुनिश्चित करें कि आप वहां अपने कस्टम मार्ग जोड़ते हैं। यह लेख इसे खूबसूरती से कवर करता है।