2012-10-10 11 views
29

मूल रूप से मुझे लगता है कि इसलिए यह सुनिश्चित करना चाहते: http://website.com/AboutMVC 4 निकालें आधार मार्ग से "घर"

"घर" यूआरएल में दिखाने नियंत्रक बनाना होगा: http://website.com/Home/About

के रूप में दिखाता है यूजर को पढ़ने के लिए यूआरएल लंबा है।

routes.MapRoute(
      name: "About", 
      url: "", 
      defaults: new { controller = "Home", action = "About", id = UrlParameter.Optional } 
      ); 

किसी ने मुझे बाहर करने में मदद कर सकते हैं तो कृपया:

मैं निम्नलिखित करने की कोशिश की? इस तरह

उत्तर

47

कोशिश कुछ:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "OnlyAction", 
     "{action}", 
     new { controller = "Home", action = "Index" } 
    ); 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
    ); 
+0

यह पूरी तरह से काम करता है! धन्यवाद .... आदेश यहां मायने रखता है ... मैंने ठीक पहले किया था, हालांकि ... यह डिफ़ॉल्ट मार्ग के तहत था जिसने इसे काम नहीं किया। आपका कमाल, धन्यवाद! – BRogers

+0

धन्यवाद श्रीमान .... –

+0

वास्तव में अच्छा काम करता है! – Kbdavis07

6

इस प्रयास करें। यह आपके यूआरएल को कम करता है।

 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.LowercaseUrls = true; 

     routes.MapMvcAttributeRoutes(); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

और अपने घर नियंत्रक में:

[Route("About")] 
    public ActionResult About() 
    { 
     return View(); 
    } 
+0

याद रखें कि आप लोअरकेस में लिंक निर्दिष्ट कर सकते हैं और यह पता बार में भी लोअरकेस के रूप में दिखाता है। यह केस सेंसिटिव नहीं है। –

2

चरण 1: मार्ग बाधा बनाएँ।

public class RootRouteConstraint<T> : IRouteConstraint 
    { 
     public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
     { 
      var rootMethodNames = typeof(T).GetMethods().Select(x => x.Name.ToLower()); 
      return rootMethodNames.Contains(values["action"].ToString().ToLower()); 
     } 
    } 

चरण 2:
अपने डिफ़ॉल्ट मानचित्रण मार्ग बाधा है कि हम अभी बनाया का उपयोग करता है के ऊपर एक नया मार्ग मैपिंग जोड़ें। सामान्य पैरामीटर नियंत्रक वर्ग होना चाहिए जिसे आप अपने "रूट" नियंत्रक के रूप में उपयोग करने की योजना बनाते हैं।

routes.MapRoute(
       "Root", 
       "{action}", 
       new {controller = "Home", action = "Index", id = UrlParameter.Optional}, 
       new {isMethodInHomeController = new RootRouteConstraint<HomeController>()}); 




routes.MapRoute(
        "Default", 
        "{controller}/{action}/{id}", 
        new 
        {controller = "Home", action = "Index", id = UrlParameter.Optional} 
        ); 

अब तुम इतनी तरह अपने घर नियंत्रक तरीकों का उपयोग करने में सक्षम होना चाहिए: example.com/about, example.com/contact

यह केवल HomeController प्रभावित करता है। अन्य सभी नियंत्रकों के पास डिफ़ॉल्ट रूटिंग कार्यक्षमता होगी।

+4

अपने उत्तर को कई प्रश्नों की प्रतिलिपि/पेस्ट न करें। यदि आप कॉपी और पेस्ट करने में सक्षम हैं, तो सवाल संभवतः एक डुप्लिकेट है और इस तरह बंद होना चाहिए। – Andy

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