【问题标题】:Generic Web API controller通用 Web API 控制器
【发布时间】:2014-04-11 22:45:39
【问题描述】:

我正在使用 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 可以处理路由吗?这是个好主意吗?

【问题讨论】:

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


【解决方案1】:

最后我没有尝试通用控制器。似乎可以通过路由跳过一些箍来实现。

但是,为了让它工作而进行的路由修改非常复杂,这有点抵消了我将获得的好处。我想让事情变得简单。所以我只是创建了一个通用基类:

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

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

class PrescriptionsController : MyBaseController<Prescription> { }

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

【讨论】:

    猜你喜欢
    • 2020-01-04
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多