2016-06-13 5 views
1

Ich bin ein erfahrener Programmierer aber neu in WebApi (Wir verwenden MS asp.net mvc-Framework).Wie kann ich die Clientseite von HttpResponseMessage sehen?

Ein Kunde verlangt, dass alle Rückgabewerte in einem Objekt dieser Art gewickelt werden:

I
{ 
    success: [boolean], 
    errorLog: [error message, if failed], 
    referer: [api call details], 
    payload: { 
    // results, if success 
} 

sah, dass der Standard bereits für die Rückgabe eines HttpResponseMessage Objekt aufgerufen, die diese Informationen hat. Also, anstatt zu duplizieren, kehre ich nur ein Objekt dieser Art (entweder direkt oder über einen IHttpActionResult, zB

return Ok(object); 

Allerdings kann ich nicht sehen, wie dieses Objekt zu verwenden, von der Client-Seite. Wenn ich eine machen api Anruf aus dem Browser, alles, was ich sehe, ist der Inhalt (auch den Debugger) Wenn ich einen Fehler zurück, wie ich sehe.

<Error> 
    <Message>foo bar</Message> 
</Error> 

aber kein Zeichen von den anderen Informationen (Statuscode, ReasonPhrase, etc.) Dasselbe gilt, wenn ich das Json-Format zurückgebe:

Ist dieses Objekt "abgestreift"? Auf der ganzen Linie, und wenn ja, von wem? Wie kann ich zulassen, dass dieses Objekt beim Anrufer ankommt, damit er alle zugehörigen Felder verwenden kann?

Dank

Edit: Wie Kommentar gebeten, ich bin Entsendung meines serverseitigen Code, wenn auch nicht viel, um es dort ist. Mein Versuch, das HttpResponseMessage Objekt zu sehen, war diesen Controller zu erstellen:

public HttpResponseMessage Get() { 
      HttpResponseMessage response = Request.CreateErrorResponse(HttpStatusCode.NotAcceptable, "foo bar"); 
      response.ReasonPhrase = "There is no reason."; 
      return response; 
     } 

Dies ist der Code, der oben gepostet in der XML-Ergebnisse.

+0

sollte nicht der Fall sein

public class Payload { } public class CustomResponse { public IList<bool> Success { get; set; } public IList<string> ErrorLog { get; set; } public IList<string> Referer { get; set; } public Payload Payload { get; set; } } 

und senden Sie die Antwort erstellen, können Sie Ihre Post serverseitiger Code? –

Antwort

0

Is this object 'stripped' somewhere along the line, and if so by who? Das Objekt wird durch HttpResponseMessage unter der Haube abgezogen werden, wenn Sie IHttpActionResult ein Aufruf an ExecuteAync zurückzukehren eine HttpResponseMessage zu erstellen. Also, um alle Felder zu sehen, sollten Sie ein Werkzeug wie Fiddler im Rohmodus oder Erweiterung wie HttpHeader für Chrom verwenden. How can I allow this object to arrive to the api caller so s/he can use all the associated fields
Eine Möglichkeit, die erwartete Antwort zu senden ist eine POCO wie diese wie folgt

return OK(new CustomObject(){Payload=yourObject}); 
+0

Danke für Ihre Antwort; Als ich versuchte, es zu implementieren, stieß ich auf dieses Problem: http://stackoverflow.com/questions/37862939/error-with-webapi-serialization – Pete

+0

Verwenden Sie Newtonsoft Json Serializer? –

Verwandte Themen