Web Api和控制器矫枉过正

时间:2013-03-17 18:34:22

标签: asp.net-mvc rest asp.net-web-api

我开始整合WebApi& OData进入试验台应用。让我们保持简单,坚持使用一个域实体Customer。显然我会有一个MVC控制器。搜索得到它自己的视图模型(基于Lucene索引),这样将是单独的控制器,现在ODataController。但由于视图/编辑页面将拥有自己的视图模型,因此它们将成为自己的控制器。这开始感觉有点矫枉过正。

试图找出一个好的设计来使这个工作,并仍然使用代表实体的URL的想法。 URL中的实体应该是Customer还是以某种方式根据URL params提供不同的表示形式?或者Customer / CustomerSearch / CustomerEdit应该是不同的实体(听起来不对)?

1 个答案:

答案 0 :(得分:0)

我认为这个WebAPI应用程序将成为您要构建的ASP.NET MVC解决方案的独立解决方案。简而言之,WebAPI将是业务/域层,MVC将是表示层。

因此,在谈到WebAPI解决方案时,您只需要一个ApiController用于上面提到的Customer示例。视图/编辑请求可以具有自己的视图模型......或者不具有。根据您如何制作视图模型,您可以为客户提供单一视图模型,或者您可以开发客户视图层次结构,其中基本视图模型包含与搜索相关的数据,而后代视图模型可以充实细节

您的路由请求可能如下所示:

GET - /Customer/                  retrieve multiple customers 
                                  (supplying OData parameters in query string)
GET - /Customer/{id}              retrieve a single customer
PUT - /Customer/{id}              edit customer

您需要的是两条路线,一条ApiController用于客户,三条请求方法用于您所描述的内容。我不建议为OData单独ApiController,因为功能取决于实体。