2013-06-13 5 views
66

In einigen Fällen habe ich NewtonSoft JSON.NET und in meinem Controller gebe ich nur das Jobject von meinem Controller und alles ist gut.Gibt eine JSON-Zeichenfolge explizit von Asp.net WEBAPI zurück?

Aber ich habe einen Fall, wo ich einige rohe JSON von einem anderen Dienst und muss es von meinem WebAPI zurückgeben. In diesem Zusammenhang kann ich NewtonSOft nicht verwenden, aber wenn ich könnte, dann würde ich ein JOBJECT aus der Zeichenkette erzeugen (was wie unnötiger Verarbeitungsaufwand erscheint) und das zurückgeben und alles würde gut mit der Welt sein.

Allerdings möchte ich dies einfach zurückgeben, aber wenn ich die Zeichenfolge zurückgeben, dann erhält der Client einen JSON-Wrapper mit meinem Kontext als eine codierte Zeichenfolge.

Wie kann ich explizit ein JSON von meiner WebAPI-Controller-Methode zurückgeben?

Antwort

162

Es gibt ein paar Alternativen. Die einfachste ist Ihre Methode ein HttpResponseMessage zurückkehren haben, und erstellen Sie diese Antwort mit einem StringContent basierend auf Zeichenfolge, etwas ähnlich den folgenden Code:

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

Und Überprüfung null oder leer JSON-String

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

Wunderbar !! Danke Carlos! :) – ManJan

+4

Ausgezeichnet. Ich machte eine JSON-Zeichenkette und gab sie als Zeichenkette zurück, aber das führte unvermeidlich extra um das Ergebnis herum. Das sollte das beheben. – dumbledad

+0

Das ist ärgerlich. Sie müssen tatsächlich die 'HttpResponseMessage-Antwort' erstellen und dann den' StringContent' zuweisen die '.Content' -Eigenschaft.Es funktioniert nicht, wenn Sie den StringContent im Konstruktor zuweisen. – Suamere

2

Wenn Sie speziell diesen JSON nur zurückgeben möchten, ohne WebAPI-Funktionen zu verwenden (wie das Zulassen von XML), können Sie immer direkt in die Ausgabe schreiben. Angenommen, Sie hosten dies mit ASP.NET, haben Sie Zugriff auf das Objekt Response, sodass Sie es auf diese Weise als Zeichenfolge ausgeben können. Sie müssen dann nichts von Ihrer Methode zurückgeben - Sie haben es bereits geschrieben der Antworttext zum Ausgabestream.

Verwandte Themen