2008-11-01 15 views
11

मैं समाचार की एक सूची के लिए एक एमवीसी मार्ग बनाना चाहता हूं, जिसे कई प्रारूपों में परोसा जा सकता है।"फाइल एक्सटेंशन" के साथ एएसपी.नेट एमवीसी रूट्स

  • समाचार -> (एक्स) एचटीएमएल
  • news.rss -> आरएसएस
  • news.atom -> एटम

यह संभव यह करने के लिए है (अधिक सामान्य "वैकल्पिक विस्तार "मेरे नियोजित डिजाइन में कई जगहों पर स्थिति बढ़ती है) एक मार्ग के साथ? या मैं इस तरह दो मार्गों बनाने के लिए की जरूरत है:

routes.MapRoute("News-ImplicitFormat", 
       "news", 
       new { controller = "News", action = "Browse", format = "" }); 

routes.MapRoute("News-ExplicitFormat", 
       "news.{format}" 
       new { controller = "News", action = "Browse" }); 

ऐसा लगता है कि ऐसा लगता है कि मार्ग सिस्टम का समर्थन कुछ है करने के लिए उपयोगी होगा:

routes.MapRoute("News", 
       "news(.{format})?", 
       new { controller = "News", action = "Browse" }); 

उत्तर

12

मैं एक विधि बनाया की तरह जोड़ने जोड़े समर्थन करने के लिए यह निम्नानुसार है:

public static void MapRouteWithOptionalFormat(this RouteCollection routes, 
               string name, 
               string url, 
               object defaults) 
{ 
    Route implicitRoute = routes.MapRoute(name + "-ImplicitFormat", 
              url, 
              defaults); 
    implicitRoute.Defaults.Add("format", string.Empty); 

    Route explicitRoute = routes.MapRoute(name + "-ExplicitFormat", 
              url + ".{format}", 
              defaults); 
} 
+1

यह स्पष्ट रूप से काम करता है, हालांकि मैंने स्पष्ट और स्पष्ट मार्गों के आदेश को स्विच किया है, स्पष्ट रूप से अधिक स्पष्ट होने के कारण। – ern

0

आप इस काम को सामान्य मार्गों के साथ बनाने के लिए बाधाओं का उपयोग करने में देख सकते हैं।

अपडेट: असल में, मैंने सवाल को गलत तरीके से पढ़ा। दूसरा जवाब अब के लिए सही काम है। या एक कस्टम मार्ग बनाएँ। हम एक संभावित भविष्य की सुविधा के रूप में वैकल्पिक सेगमेंट के विचार को देख रहे हैं।

+0

फिल, मैं क्या रोकना चाहूंगा? .Contains ("।")? क्या आप इस रणनीति को संक्षेप में रेखांकित कर सकते हैं? बहुत बढ़िया काम, वैसे भी। धन्यवाद! –

+0

फिल हैक एक एमवीसी प्रश्न पर डाउनवॉटेड हो रहा है, मुझे लगता है कि अक्सर ऐसा नहीं होता :) – fearofawhackplanet

+2

मुझे पता है कि यह 2-3 साल पुराना है, लेकिन क्या यह अब करने योग्य है? मैं सोच रहा था कि क्या मेरे पास '/ post/15' = html,'/post/15.json' = json api-data हो सकता है। – Alxandr

संबंधित मुद्दे