2010-02-26 7 views
8

Một trong những trở ngại lớn mà tôi dường như đang gặp phải một số yêu cầu định tuyến phức tạp hơn đối với một số ứng dụng dựa trên MVC mà tôi đang phát triển. Tôi gặp sự cố khi tìm tập hợp các hướng dẫn thích hợp để hướng dẫn tôi qua hướng dẫn để hiểu đầy đủ.Hướng dẫn ASP Routing nâng cao và các ví dụ

Điều tôi muốn tìm là tập hợp đầy đủ các hướng dẫn cho mọi thứ định tuyến từ cơ bản (controller/action/id) đến nâng cao.

Một ví dụ về những gì tôi đang kêu gọi định tuyến tiên tiến là những thứ như:

/blog/year/month/day/title - sẽ lập bản đồ để điều khiển: blog và hành động: post và như thông số: year, month, daytitle

/blog/title - sẽ ánh xạ tới bộ điều khiển: blog và hành động: post và làm tham số: title

/title - sẽ lập bản đồ để điều khiển: blog và hành động: post và như thông số: title

tôi có thể lập bản đồ mỗi bộ có thể để một con đường rõ ràng trong toàn cầu sử dụng một cơ sở dữ liệu, nhưng điều đó dường như nó đánh bại điểm của việc có động cơ tuyến tuyến đường đến đúng địa điểm. Tôi muốn xác định quy tắc một lần.

Trả lời

15

Tôi không hiểu, tại sao bạn không thể chỉ định mỗi một trong số chúng dưới dạng một tuyến đường riêng biệt, sử dụng cụm từ thông dụng khi cần. Ví dụ: để phân biệt giữa /blog/year/month/day/title/blog/title.

Mỗi bộ trong số đó là một trường hợp riêng biệt và bạn cần phải thông báo cho MVC biết phải làm gì với từng trường hợp. Bạn có thể làm điều này bằng defining the rule once trong Global.asax.cs file:

Đối với trường hợp thứ nhất: /blog/year/month/day/title

routes.MapRoute(
    "Blog Full Route", // Route name 
    "blog/{year}/{month}/{day}/{title}", // URL with parameters 
    new {controller = "blog", action = "post"}, // Defaults 
    new {year = @"\d+", month= @"\d+", day = @"\d+"} // Constrain parameters with RegEx patterns 
    ); 

Đối với trường hợp thứ hai: /blog/title

routes.MapRoute(
    "Blog Title Route", // Route name 
    "blog/{title}", // URL with parameters 
    new {controller = "blog", action = "post"}, // Defaults 
    ); 

Đối với trường hợp cuối cùng: /title

routes.MapRoute(
    "Title Route", // Route name 
    "{title}", // URL with parameters 
    new {controller = "blog", action = "post"}, // Defaults 
    ); 

Bí quyết đang đặt các tuyến đường này theo thứ tự chính xác, với ít nhất là cụ thể ở phía dưới. Việc thay đổi thứ tự sẽ dẫn đến việc sử dụng sai tuyến đường (đặc biệt trong hai tuyến cuối). Nếu trường hợp cuối cùng được chuyển sang trường hợp thứ hai, các URL thuộc loại blog/SomeTitle sẽ chuyển đến hành động post với blog làm tiêu đề.

Bất cứ khi nào bạn đang tạo một con đường cho một cái gì đó, hãy giữ những điều sau:

  1. thông số tuyến đường Hạn chế với RegEx
  2. Hãy very biết trật tự tuyến đường (mà tuyến đường đi trước đó)
  3. các dấu ngoặc nhọn hành động {something} biểu thị thông số

Một số hướng dẫn tốt:

+0

Tốt giải thích và liên kết, cảm ơn bạn. – Kieron

+0

Câu trả lời tuyệt vời. –