2013-04-09 13 views
11

mi piacerebbe sapere qual è il vantaggio dell'utilizzo di HttpResponseMessage come tipo di ritorno nel mio ApiController? confronta per restituire direttamente l'entità o la raccolta tipizzata.asp.net webapi controller, return typed entity o HttpResponseMessage

stavamo cercando di decidere su una pratica per mantenere le cose coerenti per il progetto su cui stiamo lavorando.

risposta

13

Il ripristino di HttpResponseMessage è utile quando si tenta di utilizzare il livello controller come traduzione tra il protocollo HTTP ei servizi interni .Net. Permette il controllo diretto sul payload e le intestazioni HTTP. Rende facile restituire 202, 204, 304, 303 risposte. Semplifica l'impostazione delle intestazioni di cache. Hai il controllo esplicito sul tipo di media della risposta.

Restituendo un oggetto si aggiunge effettivamente un livello "non fare nulla" alla propria architettura. Considerare ....

public Foo Get(int id) { 
    return _fooRepository.GetFoo(id) 
} 

Qual è lo scopo di questo metodo? Che valore aggiunge? Almeno in MVC land, il controller aveva il ruolo di abbinare il modello e la vista.

Quando si restituiscono oggetti da un APIController, è necessario influire indirettamente su HTTPResponseMessage utilizzando un insieme di astrazioni specifiche per Web API/MVC e senza alcun concetto corrispondente nel mondo HTTP. Formatters, ActionFilters, ModelBinders, HttpResponseException sono tutte infrastrutture progettate per consentire al framework di elaborare i messaggi di richiesta e risposta HTTP dietro le quinte.

Restituire HttpResponseMessage richiede direttamente che il metodo del controller esegua il lavoro necessario per restituire il messaggio HTTP desiderato.

Non credo che aggiunga complessità alla vostra applicazione, ma rende solo ciò che sta accadendo visibile.

Scende se si desidera utilizzare l'API Web come un framework "oggetto remoto su HTTP" (nel qual caso darei un'occhiata a ServiceStack) o se si desidera sfruttare l'HTTP come protocollo di applicazione .

+1

Sono assolutamente d'accordo, forse per separare le preoccupazioni perché non avere un livello di servizio (metodi fortemente tipizzati) e un livello di servizio Web (API Web ASP.NET), quindi il livello di servizio può essere facilmente utilizzato da Winform, WPF, Console e test progetti ed esposti come webservice da ASPNET WebAPi –

Problemi correlati