Vor einigen Monaten hat Microsoft beschlossen, die HttpResponseMessage-Klasse zu ändern. Zuvor konnten Sie einfach einen Datentyp an den Konstruktor übergeben und dann die Nachricht mit diesen Daten zurückgeben, jedoch nicht mehr.
Jetzt müssen Sie die Content-Eigenschaft verwenden, um den Inhalt der Nachricht festzulegen. Das Problem ist, dass es vom Typ HttpContent ist und ich anscheinend keine Möglichkeit finde, eine Zeichenfolge beispielsweise in HttpContent zu konvertieren.
Weiß jemand, wie man mit diesem Problem umgeht? Vielen Dank.
c#
asp.net-mvc
asp.net-web-api
Prätor
quelle
quelle
Sie sollten die Antwort mit Request.CreateResponse erstellen :
Sie können Objekte nicht nur Zeichenfolgen an CreateResponse übergeben und diese basierend auf dem Accept-Header der Anforderung serialisieren. Dies erspart Ihnen die manuelle Auswahl eines Formatierers.
quelle
CreateErrorResponse()
wenn die Antwort ein Fehler ist, wie im Beispiel dieser Antwort. In meinem Try-Catch verwende ich:this.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "message", exception);
Und dies ist die richtige Antwort, wenn Sie überhaupt Bedenken haben, den Accept-Header des Anrufers ohne zusätzliche Spielereien zu respektieren (und Sie verwenden WebAPI)ApiController
. Wenn SieController
stattdessen nur erben , funktioniert es nicht und Sie müssen es selbst erstellen:HttpResponseMessage msg = new HttpResponseMessage(); msg.Content = new StringContent("hi"); msg.StatusCode = HttpStatusCode.OK;
Anscheinend ist der neue Weg dazu hier detailliert beschrieben:
http://aspnetwebstack.codeplex.com/discussions/350492
Um Henrik zu zitieren:
Grundsätzlich muss also ein ObjectContent-Typ erstellt werden, der anscheinend als HttpContent-Objekt zurückgegeben werden kann.
quelle
new JsonMediaTypeFormatter();
oder ähnliches abhängig von Ihrem FormatObjectContent
wird nicht gefunden, mit WCFDie einfachste einzeilige Lösung ist die Verwendung
Für serialisierten JSON-Inhalt:
quelle
Für jedes T-Objekt können Sie Folgendes tun:
quelle
Request
ist nur mit einerCreateResponse
Methode verfügbar , wenn Sie erbenApiController
. Es wird nicht funktionieren, wenn mitController
.Sie können Ihre eigenen speziellen Inhaltstypen erstellen. Zum Beispiel eine für Json-Inhalte und eine für XML-Inhalte (weisen Sie sie dann einfach dem HttpResponseMessage.Content zu):
quelle
Inspiriert von der Antwort von Simon Mattes musste ich den von IHttpActionResult geforderten Rückgabetyp ResponseMessageResult erfüllen. Ich habe auch den JsonContent von nashawn verwendet und ...
Siehe Nashawns Antwort für JsonContent.
quelle
Kein Zweifel, dass Sie richtig Florin sind. Ich habe an diesem Projekt gearbeitet und festgestellt, dass dieser Code:
Könnte ersetzt werden durch:
quelle