vb.net - Can a single route in MVC be used to match all these urls? -
मेरे पास यह मार्ग है:
routes.MapRoute (name: = "Archives", Url: = "पोस्ट / अभिलेखागार / {year} / {month}", डिफ़ॉल्ट: = {.controller = "posts", .action = "archives", .year = UrlParameter.Optional, .month = UrlParameter.Optional के साथ नया })
यह काम करता है इसलिए मुझे http://example.com/posts/archives/2014/12
जैसा कुछ मिलता है मैं भी यूआरएल जैसे http://example.com/posts/archives/2014/
को संभाल करना चाहता हूं, http://example.com/posts/archives/2014/12/page/ 3
, http://example.com/posts/archives/2014/page/3
मैंने नीचे मार्ग जोड़ने की कोशिश की
< Code> routes.MapRoute (name: = "ArchivesWithPaging", url: = "posts / archives / {year} / {month} / page / {page}", defaults: = with {.controller = "Posts",। क्रिया = "अभिलेखागार", .यियर = UrlParameter.Optional, .month = UrlParameter.Optional, .page = UrlParameter.Optional})
लेकिन फिर http://example.com/posts/archives/2014/12
का कारण बनने के कारण http://example.com/posts/archives/2012/12/ पृष्ठ
तो क्या इनमें से सभी को पकड़ने के लिए एकमात्र मार्ग है या मुझे कई मार्गों की आवश्यकता है?
वैकल्पिक रूप से, यदि कोई भी मार्ग संभव नहीं है, तो कौन से मार्ग मुझे ठीक से उन मामलों से मिलान करने में मदद करेंगे
अपने सटीक प्रश्न का उत्तर देने के लिए: हाँ, आप इन सभी URL के मेल खाने के लिए एक एकल मार्ग का उपयोग कर सकते हैं। आप उन मार्गों को आप कर सकते हैं और संभाल कर सकते हैं जो आप चाहते हैं और उस यूआरएल के लिए रिक्त वापसी करेंगे जो आप उस मार्ग में नहीं करना चाहते हैं।
हालांकि, आपको इसके लिए इस तरह के चरम पर जाने की आवश्यकता नहीं है सरल परिदृश्य इस परिदृश्य के सभी मामलों को संभालने के लिए, आपको वास्तव में 3 रूट्स की आवश्यकता है - एक मानक यूआरएल के लिए, एक पेजिंग के साथ मानक यूआरएल के लिए और एक पेज के साथ महीने के बिना यूआरएल के लिए।
आपको ज़रूरत है यह सुनिश्चित करने के लिए कि वे सही क्रम में सूचीबद्ध हैं, हालांकि, या वे अपेक्षा के अनुरूप कार्य नहीं करेंगे मार्गों को आम तौर पर सबसे विशिष्ट से कम से कम विशिष्ट रूप से सूचीबद्ध किया जाना चाहिए, दाईं तरफ के मूल्यों के लिए बाएं ओर के मूल्यों पर पहले ध्यान देना।
अपने सबसे विशिष्ट मार्गों के लिए, मुझे ज्यादा दिखाई नहीं पड़ता महीने के अलावा कुछ भी वैकल्पिक बनाने में इंगित करें UrlParameter.Optional का उपयोग करना खाली स्ट्रिंग का उपयोग करने के बराबर है, जो समस्याग्रस्त हो जाएगा यदि आपका नियंत्रक इन्हें पूर्णांक होने की उम्मीद कर रहे हैं आपने निर्दिष्ट नहीं किया था कि आप स्ट्रिंग चाहते थे, इसलिए मैं इस उदाहरण में इंटर्ज मान रहा हूं:
सार्वजनिक वर्ग डाक नियंत्रक इनहेरिट्स सिस्टम। वेब। एमवीसी कंट्रोलर फ़ंक्शन अभिलेखागार (वर्ष पूर्णांक के रूप में, पूर्णांक के रूप में महीने, पृष्ठ जैसा कि पूर्णांक के रूप में है) कार्रवाई के रूप में लौटें देखें () समाप्ति फ़ंक्शन अंत कक्षा
और यहां के मार्गों को सबसे विशिष्ट से कम से कम विशेष रूप से सूचीबद्ध किया गया है:
मार्ग .MapRoute (name: = "archive yearWithPaging", _ url: = "posts / archives / {year} / page / {page}", _default: = {.controller = "posts", .action = "Archives" , .month = 0}) मार्गों। MapRoute (नाम: = "ArchivesWithPaging", _ url: = "पोस्ट / अभिलेखागार / {वर्ष} / {महीने} / पृष्ठ / {पेज}", _ डिफ़ॉल्ट: = नए के साथ {। नियंत्रक = "डाक", .action = "अभिलेखागार"}) मार्गों। MapRoute (नाम: = "अभिलेखागार", _ url: = "पोस्ट / अभिलेखागार / {वर्ष} / {महीने}", _ डिफ़ॉल्ट: = नए के साथ { .controller = "posts", .action = "archives", .page = 1, .month = 0})
स्पष्टीकरण पर:
पहला मार्ग संभाल करने के लिए है http://example.com/posts/archives/2014/page/3
। यह आरेखित कंट्रोलर एक्शन मेथड के लिए 0 को एक डिफॉल्ट महीने के रूप में गुजरता है, इसलिए जब यूआरएल एक माह निर्दिष्ट नहीं करता है तो यह आपके लिए आसान है।
दूसरा रास्ता है //example.com/posts/archives/2014/12/page/3
। यदि आप बाधाओं का उपयोग नहीं करते हैं (और वास्तव में यहां कोई कारण नहीं है जो आपको यहां होना है), तो इसे पहले मार्ग का पालन करना होगा क्योंकि महीना पैरामीटर अनजाने में / page /
सेगमेंट से मेल खा सकता है।
तीसरा मार्ग संहिता http://example.com/posts/archives/2014/12
और http://example.com/posts/archives/2014 कोड> क्योंकि महीने वैकल्पिक है यदि पृष्ठ प्रदान नहीं किया गया है, तो यह पृष्ठ संख्या 1 और महीने के लिए डिफ़ॉल्ट भी हो सकता है।
Comments
Post a Comment