2012-10-10 9 views
29

Về cơ bản tôi muốn làm cho nó để: http://website.com/Home/AboutMVC 4 Remove "nhà" từ đường cơ sở

Hiển thị lên như: http://website.com/About

Các "nhà" điều khiển hiển thị trong url sẽ làm cho url dài hơn để người dùng đọc.

Tôi cố gắng để làm như sau:

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

Có thể ai đó giúp tôi ra xin vui lòng?

Trả lời

47

Hãy thử một cái gì đó như thế này:

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

Điều đó hoạt động hoàn hảo! Cảm ơn bạn .... thứ tự quan trọng ở đây ... Tôi đã làm điều đó chính xác trước đó, tuy nhiên ... nó đã được theo con đường mặc định mà làm cho nó không hoạt động. Tuyệt vời của bạn, cảm ơn! – BRogers

+0

Cảm ơn bạn .... –

+0

Hoạt động thực sự tốt! – Kbdavis07

6

Hãy thử điều này. Nó cũng làm cho các URL của bạn chữ thường.

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

Và trong điều khiển Trang chủ của bạn:

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

Hãy nhớ rằng bạn có thể chỉ định các liên kết bằng chữ thường và nó cũng hiển thị dưới dạng chữ thường trong thanh địa chỉ. Nó không phân biệt chữ hoa chữ thường. –

2

Bước 1: Tạo các hạn chế đường.

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

Bước 2:
Thêm một ánh xạ tuyến đường mới trên bản đồ mặc định của bạn có sử dụng các hạn chế con đường mà chúng ta vừa tạo ra. Tham số chung phải là lớp điều khiển bạn định sử dụng làm bộ điều khiển "Gốc" của bạn.

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

Bây giờ bạn sẽ có thể truy cập vào các phương pháp điều khiển ngôi nhà của bạn như sau: example.com/about, example.com/contact

này sẽ chỉ ảnh hưởng đến HomeController. Alll Bộ điều khiển khác sẽ có chức năng định tuyến mặc định.

+4

Không sao chép/dán câu trả lời của bạn cho nhiều câu hỏi. Nếu bạn có thể sao chép và dán, câu hỏi có thể trùng lặp và phải được đóng như vậy. – Andy