2013-01-11 26 views
1

這是一個簡單的問題,管理跨asp.net web api項目的許多方法用webapi管理api服務中的許多方法路由

我們有相當多的方法是這樣的:

ProductsApiController.GetByType(string type, string x) 
ProductsApiController.GetByType(string type, int limit) 
//method has a number of arguments.. 
ReportsApiController.GetAll(string x, string y) 

問題:我們有一噸的自定義參數的方法,我們必須定義爲他們每個人的

一個 定製路線
routes.MapRoute(
    name: "ProductRoute", 
    url: "ProductsApiController/{type}/{x}" 
); 

routes.MapRoute(
    name: "ReportRoute", 
    url: "ReportsApiController/{x}/{y}" 
); 

我正在簡化簽名,有很多參數的方法很多,這些方法通常不會有參數。

這是什麼一般的模式?有沒有更好的方法來做到這一點,或者我只有離開這個。

回答

1

我想說你的情況,最合理的解決方案是使用屬性路由。

是的,它仍然意味着您必須創建大量路由,但由於它們與單個動作有效綁定,所以在屬性中裝入此路由最合理。

您可以從的NuGet獲得AR:

PM> Install-Package AttributeRouting.WebApi 

在你的情況是這樣的:

[GET("mytype/{type}/{x}")] 
public MyType GetByType(string type, string x) 

[GET("mytype/{type}/{limit}")] 
public MyType GetByType(string type, int limit) 

等等... 其中,恕我直言,是更容易管理

前段時間我寫了一篇介紹帖子給AR - http://www.strathweb.com/2012/05/attribute-based-routing-in-asp-net-web-api/

你也可以訪問他們的優秀wiki - https://github.com/mccalltd/AttributeRouting/wiki

+0

謝謝。這正是我需要的:) – pradeep

1

這是在查詢字符串中傳遞URI參數變得非常方便的一種情況。您可以只定義一個路由,然後讓該操作的所有URI參數通過查詢傳入(例如ReportsApi/GetAll?x = 5 & y = 6)。您只需定義一個路徑,其中還包含路徑模板({controller}/{action})。否則,如果你想以不同的方式在路徑中傳遞所有參數,我想不出一個更好的方法。因爲你必須讓路由系統知道從哪裏獲取每個參數以及它應該綁定哪個參數名稱。對於查詢字符串參數的方式,沒有一個用於確定參數名稱的約定。你可以看看菲利普在下面使用屬性路由的好建議。它不會減少你必須寫的路線數量,但至少他們會更接近你需要它們的代碼。

+0

是的。但是添加這些問號以及什麼不會讓JavaScript的請求變得非常醜陋和不安寧。然後制定自定義路線涉及到管理太多的代碼。 – pradeep