2012-09-24 12 views
32

In una delle mie richieste Get, voglio restituire un HttpResponseMessage con un po 'di contenuto. Attualmente lo faccio funzionare come segue:: contenuto in HttpResponseMessage

var header = new MediaTypeHeaderValue("text/xml"); 
Request.CreateResponse(HttpStatusCode.OK, myObject, header); 

Tuttavia, poiché sto usando la richiesta statica, questo diventa davvero difficile da testare. Da quello che ho letto, dovrei essere in grado di effettuare le seguenti operazioni:

return new HttpResponseMessage<T>(objectInstance); 

Tuttavia, sembrano non essere in grado di fare questo. È perché sto usando una versione precedente di WebApi/.NET?


Su un lato nota, ho scoperto che si potrebbe creare una risposta come segue:

var response = new HttpResponseMessage(); 
response.Content = new ObjectContent(typeof(T), objectInstance, mediaTypeFormatter); 

Quello che mi ha sconcertato è per questo devo aggiungere una mediaTypeFormatter qui. Ho aggiunto il formattatore di tipo multimediale al livello globale.asax.

Grazie!

+0

Devi passare il formattatore perché altrimenti ObjectContent avrebbe bisogno di usare un membro statico per accedere alla raccolta globale, il che renderebbe il test più difficile. –

+0

La richiesta non è statica, è un membro di istanza di ApiController. –

risposta

60

HttpResponseMessage<T> è stato rimosso dopo il Beta. In questo momento, invece di un dattiloscritto HttpResponseMessage abbiamo un digitato ObjectContent

Se si crea manualmente HttpResponseMessage utilizzando il suo costruttore di default senza parametri, non v'è alcun contesto di richiesta disponibile per eseguire la negoziazione del contenuto - è per questo che è necessario specificare il formattatore, o eseguire negoziazione dei contenuti a mano.

ho capito che non vuoi farlo - in modo da utilizzare questo, invece:

HttpResponseMessage response = Request.CreateResponse<MyObject>(HttpStatusCode.OK, objInstance); 

che creerebbe il messaggio di risposta basandosi sulla negoziazione del contenuto eseguito contro la richiesta.

Infine, si può leggere di più su negoziazione dei contenuti qui On this link

+4

Mi manca HttpResponseMessage , penso che fosse un'API migliore, ma Request.CreateResponse funziona correttamente. – Hugo

+3

Ricorda che qualsiasi metodo di controllo che utilizza 'HttpResponseMessage' è molto difficile da testare unitamente, quindi è meglio evitare di usarlo se puoi. –

+7

@RoyDictus Sono curioso di sapere perché rende difficile il test unitario, potresti elaborarlo per favore? –

Problemi correlati