2014-04-11 135 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> { } 

这工作就像魅力,并没有与路由或任何混乱。它清楚了解发生了什么并且相当可维护。