2012-10-10 26 views
29

Temelde ben böylece yapmak istiyorum: http://website.com/AboutMVC 4 Kaldır "ev"

url gösterilmesini "ev" kontrolör yapacak: http://website.com/Home/About

olarak yukarı gösterir Kullanıcının okuması için daha uzun URL.

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

birisi bana lütfen yardım eder misin:

aşağıdaki yapmaya çalıştım? Böyle

cevap

47

deneyin şey:

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

Mükemmel çalıştı! Teşekkür ederim .... sipariş önemli ... Tam olarak daha önce yaptım, ancak ... işe yaramaz olan varsayılan yolun altındaydı. Müthiş, teşekkürler! – BRogers

+0

Teşekkür ederim efendim .... –

+0

Gerçekten iyi çalışıyor! – Kbdavis07

6

bu deneyin. Ayrıca URL'lerinizi küçültüyor.

 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 } 
     ); 

Ve Ev denetleyicisi

:

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

Bağlantıları küçük harf olarak belirtebileceğinizi ve adres çubuğunda da küçük harf olarak görüldüğünü unutmayın. Büyük/küçük harfe duyarlı değildir. –

2

Adım 1: rota kısıtlamasını oluşturun.

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()); 
     } 
    } 

Adım 2:
az önce oluşturduğumuz rota kısıtlamasını kullanan varsayılan eşleme üzerinde yeni bir rota eşleme ekleyin. Jenerik parametre, “Root” kontrol cihazınız olarak kullanmayı planladığınız kontrolör sınıfı olmalıdır.

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} 
        ); 

Şimdi şöyle ev denetleyici yöntemlerine erişmek mümkün olmalıdır: example.com/about, sadece HomeController etkiler

Bu işlem example.com/contact. Alll diğer Denetleyicileri, varsayılan yönlendirme işlevselliğine sahip olacaktır.

+4

Cevabınızı birden fazla soruya kopyalamayın/yapıştırmayın. Kopyalayıp yapıştırabiliyorsanız, soru büyük olasılıkla bir kopyadır ve bu şekilde kapatılmalıdır. – Andy