通用Web API控制器

本文关键字:控制器 API Web 通用 | 更新日期: 2023-09-27 17:57:55

我使用的是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个其他模型,它们对每个CRUD操作都以完全相同的方式处理。我讨厌有5个不同的端点,它们基本上都是复制粘贴的代码。

所以我的问题是:

我可以制作一个通用控制器来处理所有这些型号吗?类似MyCommonController<T>的东西?(当然,用一个更好的名字!)在这种情况下,Web API能处理路由吗?这是个好主意吗?

通用Web API控制器

最后我没有尝试通用控制器。这似乎是可能的,通过跳过一些有路线的障碍。

然而,为了实现这一点而进行的路由修改非常复杂,这有点抵消了我将获得的好处。我想保持简单。所以我只是创建了一个通用基类:

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

并且每个类型都继承自它:

class PrescriptionsController : MyBaseController<Prescription> { }

这就像魅力一样,不必打乱路线或任何事情。它清楚地表明了正在发生的事情,并且非常易于维护。