2013-06-13 13 views
66

In alcuni casi ho NewtonSoft JSON.NET e nel mio controller restituisco solo Jobject dal mio controller e tutto va bene.Restituisce una stringa JSON esplicitamente da Asp.net WEBAPI?

Ma ho un caso in cui ottengo del JSON non elaborato da un altro servizio e devo restituirlo dal mio webAPI. In questo contesto non posso usare NewtonSOft, ma se potessi creare un JOBJECT dalla stringa (che sembra un sovraccarico di elaborazione non necessario) e restituirlo, tutto andrebbe bene per il mondo.

Tuttavia, desidero restituirlo semplicemente, ma se restituisco la stringa, il client riceve un wrapper JSON con il mio contesto come stringa codificata.

Come posso restituire esplicitamente un JSON dal mio metodo di controllo WebAPI?

risposta

162

Ci sono alcune alternative. Il più semplice è quello di avere il metodo restituisce un HttpResponseMessage, e creare quella risposta con un StringContent in base alla stringa, qualcosa di simile al codice qui sotto:

public HttpResponseMessage Get() 
{ 
    string yourJson = GetJsonFromSomewhere(); 
    var response = this.Request.CreateResponse(HttpStatusCode.OK); 
    response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json"); 
    return response; 
} 

e controllo stringa JSON nullo o vuoto

public HttpResponseMessage Get() 
{ 
    string yourJson = GetJsonFromSomewhere(); 
    if (!string.IsNullOrEmpty(yourJson)) 
    { 
     var response = this.Request.CreateResponse(HttpStatusCode.OK); 
     response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json"); 
     return response; 
    } 
    throw new HttpResponseException(HttpStatusCode.NotFound); 
} 
+0

Meraviglioso !! Grazie carlos! :) – ManJan

+4

Eccellente. Stavo creando una stringa JSON e restituendola come una stringa, ma questo ha introdotto inevitabile extra "attorno al risultato, che dovrebbe risolvere il problema: – dumbledad

+0

Questo è fastidioso. Devi effettivamente creare la risposta" HttpResponseMessage ", quindi assegnare" StringContent "a la proprietà '.Content'. Non funziona se si assegna lo StringContent nel Costruttore. – Suamere

2

Se si desidera restituire solo quel solo JSON, senza utilizzare le funzionalità WebAPI (come ad esempio XML), è sempre possibile scrivere direttamente sull'output. Supponendo che tu stia ospitando questo con ASP.NET, hai accesso all'oggetto Response, quindi puoi scriverlo in questo modo come una stringa, quindi non devi in ​​realtà restituire nulla dal tuo metodo - hai già scritto il testo di risposta al flusso di output.

Problemi correlati