通用Web API控制器

时间:2014-04-11 22:45:40

标签: c# generics asp.net-web-api

我正在使用Web API v2,我有一些模型需要为其进行CRUD操作。例如,我有一个Allergy模型和一个Prescription模型。在应用程序本身中,我有可以转换为适当模型的视图模型,但为了简单起见,我只想说我在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种其他型号,每种型号的处理方式完全相同。我讨厌有5个不同的端点,基本上是复制和粘贴代码。

所以我的问题是:

我可以制作一个通用控制器来处理所有这些模型吗?像MyCommonController<T>这样的东西? (但当然有更好的名称!)Web API可以处理该场景中的路由吗?那是不是一个好主意?

1 个答案:

答案 0 :(得分:7)

最后我没有尝试通用控制器。看起来有可能通过路由跳过一些箍。

然而,路由修改使其工作的事实是如此复杂,这种做法否定了我将获得的好处。我想保持简单。所以我只是创建了一个通用基类:

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

并让每种类型都继承自它:

class PrescriptionsController : MyBaseController<Prescription> { }

这就像魅力一样,没有必要弄乱路由或任何东西。它清楚地说明了发生了什么并且非常易于维护。