2013-03-17 12 views
6

Sto iniziando a integrare WebApi & OData in un'applicazione di banco di prova. Cerchiamo di mantenerlo semplice e attenerci a un'entità di dominio, il cliente. Ovviamente avrò un controller MVC. La ricerca ottiene il proprio modello di visualizzazione (basato su un indice di Lucene), in modo che sia un controller separato, ora ODataController. Ma dal momento che le pagine di visualizzazione/modifica avranno i propri modelli di visualizzazione, sarebbero il proprio controller. Questo inizia a sembrare eccessivo.OverAcking WebApi e controller

Cercando di capire un buon design per rendere questo lavoro e ancora lavorare con l'idea dell'URL che rappresenta l'entità. L'entità nell'URL dovrebbe essere cliente e in qualche modo fornisco rappresentazioni diverse in base ai parametri URL? O dovrebbe essere Customer/CustomerSearch/CustomerEdit essere entità diverse (che non suona bene)?

+0

Rich, sto attualmente lavorando a un progetto in cui intendiamo utilizzare OData e Web API, ma voglio renderlo flessibile (come le chiamate EF). Non siamo in quella fase (intendiamo passare da direct db a servizi). Stai pensando prima della curva. Ecco perché non penso che ci sia qualcuno che ti possa aiutare. OData non è più nuovo ma non credo che molti negozi lo stiano già utilizzando. Il matrimonio con la web API mi è sembrato intuitivamente ovvio, quindi ho fatto una ricerca. Ecco alcuni video sull'implementazione di una soluzione simile dai nostri esperti in MS http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api –

risposta

0

Presumo che questa applicazione WebAPI diventi una soluzione separata dalla soluzione MVC ASP.NET che verrà creata. In breve, WebAPI sarà il livello aziendale/dominio e MVC sarà il livello di presentazione.

Quindi, parlando della soluzione WebAPI, è sufficiente un solo ApiController per l'esempio Cliente presentato sopra. La richiesta di visualizzazione/modifica può avere i propri modelli di visualizzazione ... oppure no. A seconda della modalità di realizzazione del modello di visualizzazione, potresti essere in grado di disporre di un modello di visualizzazione singolo per i clienti oppure di sviluppare una gerarchia di visualizzazione del cliente in cui il modello di visualizzazione di base contiene i dati relativi alla ricerca e il modello di visualizzazione discendente espone i dettagli .

Le vostre richieste di routing potrebbe apparire come:

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

Come appare è ciò che serve è due vie, ApiController per il cliente, e tre metodi di richiesta per quello che hai descritto. Non raccomando un separato ApiController per OData, perché la funzionalità dipende da un'entità.

+0

Dopo averci pensato, sono sicuramente non sta usando ODataController, in particolare solo Gets sarà fatto, e perché mi blocca nel controller funziona solo per un tipo di entità. Sto usando una variante di questo routing. "/ Cliente" utilizzando la base di WebApi Funzionalità interrogabile per la ricerca e le azioni per Visualizza modello e Modifica modello "/ Cliente/Visualizza/{id}" + "/ Cliente/Modifica/{id}" – Rich

+0

Forse non sto capendo il tuo approccio . Utilizzerai le azioni sul lato WebAPI anziché sui verbi HTTP? –

+0

Probabilmente hanno bisogno di entrambi. Il problema è che il modello per una sola vista e un modello per una modifica saranno per definizione diversi. Ad esempio, un modello di modifica potrebbe richiedere un elenco di possibili ruoli che il cliente potrebbe avere. Il modello di vista ovviamente non lo avrà. Ma il modello di modifica avrà bisogno sia di GET che di PUT/POST. – Rich

Problemi correlati