2013-03-17 114 views
6

我開始的WebAPI &的OData集成到測試平臺的應用程序。讓我們保持簡單並堅持使用一個域名實體Customer。很明顯我會有一個MVC控制器。搜索獲取它自己的視圖模型(基於Lucene索引),所以這將是單獨的控制器,現在ODataController。但由於查看/編輯頁面將有自己的視圖模型,他們將是他們自己的控制器。這開始感覺過度殺傷。的WebAPI和控制器矯枉過正

試圖找出一個好的設計,使這項工作,並與代表實體的URL的想法仍然有效。如果URL中的實體是Customer,並且我以某種方式提供基於URL參數的不同表示形式?還是應該客戶/ CustomerSearch/CustomerEdit是不同的實體(這聽起來不對)?

+0

豐富,我目前工作的地方,我們打算使用的OData和Web API的一個項目,但我想讓它靈活(likee EF呼叫)。我們不在這個階段(打算從直接數據庫轉移到服務)。你正在思考超前曲線。這就是爲什麼我不認爲有人會幫助你。 OData不再是新的,但我不認爲許多商店正在使用它。與web API的結合似乎對我來說顯而易見,因此我做了一項研究。這裏是一些關於從我們的社區實施這樣一個解決方案的視頻http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api – 2013-03-18 00:23:15

回答

0

我假定這的WebAPI應用將是從你要構建ASP.NET MVC解決方案的獨立解決方案。簡而言之,WebAPI將成爲業務/領域層,而MVC將成爲表示層。

所以,在解決方案的WebAPI的講,你只需要你上面介紹的客戶例如單ApiController。查看/編輯請求可能有自己的視圖模型...或不是。根據您製作視圖模型的方式,您可能可以爲客戶提供單一視圖模型,也可以開發客戶視圖層次結構,其中基礎視圖模型包含搜索相關數據,而後代視圖模型充實細節。

你的路由請求可能看起來像:

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,因爲功能依賴於實體。

+0

想過這個之後,我絕對看不使用ODataController,特別是只有Gets將被完成,並且因爲它將我鎖定到僅適用於一種實體類型的控制器中。我正在使用此路由的變體。 「/ Customer」使用WebApi基礎查詢功能用於查看模型和編輯模型「/ Customer/View/{id}」+「/ Customer/Edit/{id}」的搜索和操作「 – Rich 2013-03-18 02:32:07

+0

也許我不理解你的方法。您將在WebAPI方面使用操作,而不是HTTP動詞? – 2013-03-18 03:29:37

+0

可能需要兩者。問題是,僅用於視圖的模型和用於編輯的模型將根據定義而不同。例如,編輯模型可能需要客戶可能擁有的可能的角色列表。視圖模型顯然不會有。但編輯模型將需要GET和PUT/POST。 – Rich 2013-03-18 04:11:37

相關問題