2012-01-03 57 views
5

Tôi thật sự rất thích ý tưởng sử dụng thuộc tính để kiểm soát ASP.NET MVC định tuyến, vì vậy thay vì đăng ký một con đường mới và polute Global.asax.cs hoặc * AreaRegistration.cs, tôi có một cái gì đó như thế này:Khung định tuyến ASP.NET MVC nào để lựa chọn?

[Route("users/{userrId}/pages/{pageId}"] 
public ActionResult Some(int userId, int pageId) { } 

Tôi thấy câu trả lời tuyệt vời: ASP.NET MVC Routing Via Method Attributes, nhưng tôi muốn nhận được một số đề xuất "sử dụng thực".

  1. Bạn nên giới thiệu khung định tuyến nào?
  2. Dễ dàng khởi động và thay đổi mã hiện tại để sử dụng như thế nào?
  3. Có sẵn trên NuGet không?

.. và có thực sự đáng để sử dụng, liệu nó có thể được coi là tốt nhất (có thể là tốt?)?

Trả lời

4

Tôi đã thử định tuyến thông qua các thuộc tính phương pháp trong khi trước đây. Sẽ không sử dụng bất kỳ khung công tác định tuyến nào.

Tôi nghĩ tốt nhất là chỉ cần làm theo lược đồ "chuẩn".

Ngoài ra - kiểm tra đơn vị từng tuyến đường đã giúp tôi khá nhiều
(Tôi thậm chí đã viết kiểm tra thất bại trong trường hợp tôi đã bỏ lỡ bất kỳ tuyến đường nào).

+0

Bạn có thể chia sẻ thử nghiệm đó không? – sashaeve

+1

@sashaeve không thể nói nó đẹp, nhưng ở đây bạn đi: https://gist.github.com/1555885 –

0

Sở thích cá nhân của tôi là giữ cấu hình định tuyến tập trung (tôi giữ nó trên Global.asax).

Tuy nhiên, bất kỳ phương pháp nào bạn sử dụng, hãy đảm bảo bạn tuân thủ một tiêu chuẩn. Tôi đoán vấn đề tôi thấy với định tuyến thuộc tính là nó cho phép các nhà phát triển có được "sáng tạo" theo cách mà nó trở nên khó hiểu và khó khăn để duy trì và hiểu.

Có tất cả định tuyến trên một vị trí tập trung, cho phép bạn nhanh chóng tìm và hiểu các quy tắc định tuyến đang được áp dụng.

2
  1. Tôi muốn giới thiệu AttributeRouting, tôi đã viết và sử dụng nó hàng ngày.
  2. Để bắt đầu, chỉ cần trang trí một hành động với thuộc tính GET. Nuget làm phần còn lại.
  3. Nuget có.

Tôi thích URL.

Tôi thích nhìn thấy chúng ngay phía trên mã mà chúng ánh xạ tới.

[GET("some/url")] 
public ActionResult HotDamn() 

Khi bạn làm điều này, bạn có thể ctrl + F "some/url" và đi đúng phương pháp hành động, khá tiện dụng. Nếu bạn thay đổi tên hành động của bạn hoặc di chuyển nó ở một nơi khác, tuyến đường vẫn ở lại với nó và không thay đổi.

[GET("some/url"] 
public ActionResult HotDarnCauseCussingIsBad() 

Nếu bạn muốn thay đổi URL và vẫn đáp ứng với URL di sản, chỉ cần thêm thuộc tính khác trên một tuổi và đánh dấu nó như là cái mới bằng cách thiết lập thứ tự = 1:

[GET("better/url", Order = 1)] 
[GET("some/url")] // order defaults to int.MaxValue 
public ActionResult BetterMethodName() 

Nếu bạn muốn nhận được cảm giác yên tĩnh, và đi tất cả các cách có ghi đè phương thức HTTP và hỗ trợ GET/POST/PUT/DELETE, bạn chỉ cần đi ngay trên với tự xấu của bạn:

[GET("")] 
public ActionResult Index() 

[POST("")] 
public ActionResult Create() 

[PUT("{id}")] 
public ActionResult Update() 

[DELETE("{id}")] 
public ActionResult Delete() 

tôi sử dụng lib này tất cả các thời gian, và làm nó nên tôi coul d. Tôi đã sử dụng nó trong một năm rưỡi và chưa bao giờ gặp rắc rối với việc định tuyến hoặc tìm kiếm nơi mọi thứ diễn ra hoặc tự hỏi tại sao tuyến đường A khớp với tuyến B. Thay vào đó là siêu dễ sử dụng, có một vài tùy chọn cấu hình và làm cho định tuyến đơn giản hơn 100x (theo ý kiến ​​của tôi).

Bất cứ điều gì bạn chọn, tôi chắc chắn khuyên bạn ít nhất là thử thuộc tính dựa trên định tuyến, cho dù AR hay cái gì khác. Có thể không phải là tách trà của tất cả mọi người, nhưng tôi hoàn toàn thích nó.

Các vấn đề liên quan