2009-06-10 9 views
16

मैंने एक नया एएसपी.नेट एमवीसी प्रोजेक्ट बनाया और साइट प्राधिकरण फ़िल्टर लागू किया।एएसपी.नेट एमवीसी डिफ़ॉल्ट मार्ग?

जब मैं {controller}/{action} जोड़ी के मार्गों को मैप करता हूं, तो मैं मार्ग पर एक भूमिका = "कुछ रोल" डिफ़ॉल्ट रूप से पास करता हूं।

यह पूरी तरह से काम करता है अगर मैं पूर्ण यूआरएल (http://localhost/somecontroller/someaction) के माध्यम से जाने के लिए और मैं पूरी मार्ग

MapRoute("SomeAction", "somecontroller/someaction", 
new { controller = "SomeController", action = "SomeAction", role = "SomeRole"); 
निर्दिष्ट

समस्या यह है कि जब कोई http://thesiteaddress.com का दौरा वहाँ एक डिफ़ॉल्ट रूट कि /home/index बजाय का आह्वान किया जाना है है / और अगर मैं

MapRoute("Default", new { controller="somecontroller",action="action" }); 

निर्दिष्ट तो मैं पिछले MapRoute से role="SomeRole" खो देते हैं।

मैं इसे कैसे हल कर सकता हूं?

उत्तर

33

यकीन Default मार्ग अपने सूचीबद्ध मार्ग तालिका के नीचे पर है। जब एएसपी.नेट एमवीसी रूटिंग टेबल की बात आती है तो ऑर्डर करें।

सही क्रम आपके कम से कम विशिष्ट मार्ग के लिए आपका 'सबसे विशिष्ट' मार्ग है।

+0

क्या आप अपना स्रोत उद्धृत कर सकते हैं? –

+0

@manuelhe http://books.google.com/books?id=1NnE3fYiUuMC&pg=PA12&lpg=PA12&dq=Default+route+bottom+ASP.NET+MVC&source=bl&ots=6gOI7-HwYG&sig=1gfWRTJaHJSJTbhAy3Ib0uAjLxQ&hl=en&sa=X&ei=doz6UuaHA8PK0wGbnYHYBw&ved=0CHsQ6AEwCA # v = onepage & q = डिफ़ॉल्ट% 20route% 20bottom% 20ASP.NET% 20MVC & f = झूठी –

2

जब आप रूट नाम प्रदान नहीं करते हैं या कार्रवाई HTTP अनुरोध के माध्यम से निर्धारित की जाती है तो वह उस क्रम से क्रम में दिखाई देगी। पहली बार जब यह मेल खाता है, तो यह बंद हो जाता है। तो शायद यह हो रहा है कि यह आपके द्वारा जोड़े गए एक से पहले मेल खाता है।

12

फिल हैक released एक मार्ग डीबगिंग उपकरण जो इस तरह की समस्याओं को समझने में अमूल्य हो सकता है।

इस उपकरण आप कैसे अपने MVC आवेदन एक यूआरएल को पार्स करता है और अपने RouteTable को यह मेल खाता देख सकते हैं के साथ

16

दरअसल, George is right। एमवीसी रूटिंग सम्मान आदेश मार्ग। आपका अंतिम मार्ग यथासंभव सामान्य होना चाहिए, और आपका पिछला मार्ग यथासंभव विशिष्ट होना चाहिए।

आपके मामले में, दोनों सामान्य हैं। आप

MapRoute("SomeAction", "Post/{action}", new {controller = "Post", role = "User"); 

और फिर

MapRoute("Default", new {controller="Home", action="Index", role = "Anonymous"}); 

हां, तो आप विशिष्टता दोनों मार्गों के लिए देना चाहिए।

+9

MVC4 में "डिफ़ॉल्ट" मार्ग declaraton ~/App_Start/RouteConfig.cs/RegisterRoutes को Global.asax से चले गए() –