2014-04-11 175 views
5

我正在使用Web API v2,並且我有一些模型需要執行CRUD操作。例如,我有一個Allergy模型和一個Prescription模型。在應用程序本身中,我有視圖模型可以轉化爲適當的模型,但爲了簡單起見,我們只是說我直接在Web API控制器中使用模型。通用Web API控制器

因此,像這樣:

public class PrescriptionsController 
    { 
     public HttpResponseMessage Put(Prescription model) 
     { 
       // saved to the DB 
     } 

     ... (other CRUD operations) 
    } 

我也有同樣的Allergy型號:

public class AllergiesController 
    { 
     public HttpResponseMessage Put(Allergy model) 
     { 
       // saved to the DB 
     } 

     ... (other CRUD operations) 
    } 

這兩種型號有不同的屬性,但是否完全相同的方式處理 - 事實上我有約3個其他模型的處理方式與每個CRUD操作完全相同。我討厭做5個不同的終端,這些終端基本上是複製和粘貼的代碼。

所以我的問題是這樣的:

我可以做一個通用的控制器來處理所有這些模型的?像MyCommonController<T>? (但當然有更好的名字!)Web API可以處理該場景中的路由嗎?這是一個好主意嗎?

+0

我認爲你可以通過不同的方式實現這一點..通過路由。我沒有嘗試,但會看到。 – Guanxi

+0

似乎可能。 下面是關於它的討論:http://stackoverflow.com/questions/12077361/generic-webapi-controller – Trisk

回答

7

最後我沒有試用通用控制器。看起來似乎可以通過跳過一些路由來實現。

但是,路由修改以使其正常工作的事實非常複雜,它抵消了我所能獲得的好處。我想保持簡單。所以,我只是創建了一個通用的基類來代替:

class MyBaseController<TModel> : ApiController 
{ 
    public TModel Get(int id) { ... } 
} 

,不得不從它的每個類型繼承:

class PrescriptionsController : MyBaseController<Prescription> { } 

這工作就像魅力,並沒有與路由或任何混亂。它清楚瞭解發生了什麼並且相當可維護。