2017-07-20 2 views
2

Ich versuche, einen einfachen API-Aufruf von einer .NET-Core-MVC-Anwendung zu machen:Datenmodelle zeigen sich nicht in HttpResponseMessage

using (var client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri("http://localhost:49897"); 

    var response = client.GetAsync("some-route").Result; 
    var dataString = response.Content.ReadAsStringAsync().Result; // Unexpected data here. See below. 

    [...] // deserialize dataString 
} 

client.GetAsync(route) erfolgreich schlägt eine API-Aktion-Methode, die letztlich das bedeutet:

public HttpResponseMessage Get([FromUri] BindingModel bindingModel) 
{ 
    List<SomeModel> resultObjects; 

    [...] // populate resultObjects with data 

    return Request.CreateResponse(HttpStatusCode.OK, resultObjects, new JsonMediaTypeFormatter()); 
} 

Aber dataString landet gleich dazu:

"{\"version\":{\"major\":1,\"minor\":1,\"build\":-1,\"revision\":-1,\"majorRevision\":-1,\"minorRevision\":-1},\"content\":{\"objectType\":\"System.Object, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e\",\"formatter\":{\"indent\":false,\"serializerSettings\":{\"referenceLoopHandling\":0,\"missingMemberHandling\":0,\"objectCreationHandling\":0,\"nullValueHandling\":0,\"defaultValueHandling\":0,\"converters\":[],\"preserveReferencesHandling\":0,\"typeNameHandling\":0,\"metadataPropertyHandling\":0,\"typeNameAssemblyFormat\":0,\"typeNameAssemblyFormatHandling\":0,\"constructorHandling\":0,\"contractResolver\":null,\"equalityComparer\":null,\"referenceResolver\":null,\"referenceResolverProvider\":null,\"traceWriter\":null,\"binder\":null,\"serializationBinder\":null,\"error\":null,\"context\":{},\"dateFormatString\":\"yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK\",\"maxDepth\":null,\"formatting\":0,\"dateFormatHandling\":0,\"dateTimeZoneHandling\":3,\"dateParseHandling\":1,\"floatFormatHandling\":0,\"floatParseHandling\":0,\"stringEscapeHandling\":0,\"culture\":{}}}}}" 

Or , im JSON-Format:

{ 
    version: { 
     major: 1, 
     minor: 1, 
     [...] 
    }, 
    content: { 
     objectType: "System.Object, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e" 
     formatter: { 
      indent: false, 
      serializerSettings: { 
       [...] 
      } 
     } 
    } 
} 

Meine Liste der Modelle ist überhaupt nicht da.

Was genau wird zurückgegeben, und warum ist nicht meine Liste der Modelle in der Antwort? Ich habe mir verschiedene Onlineressourcen angeschaut und ich mache die Dinge anscheinend genauso, wie sie es zeigen. Dies ist ein hübscher Brot-und-Butter-API-Aufruf, daher bin ich mir nicht sicher, was passiert.

+0

Sie mischen Web API 2 und Core. – Nkosi

Antwort

3

Was genau wird zurückgegeben, und warum ist nicht meine Liste der Modelle in der Antwort?

Sie mischen Web API 2 und Core auf der Serverseite. Die Daten, die Sie sehen, sind die serialisierten HttpResponseMessage, die nicht mehr Teil des Frameworks sind, so dass es wie ein normales Objekt behandelt wird, wenn Sie von einer Aktion zurückkehren.

Sie müssen die neue Syntax für .Net-Core verwenden

public IActionResult Get([FromUri] BindingModel bindingModel) { 
    List<SomeModel> resultObjects; 

    [...] // populate resultObjects with data 

    return Ok(resultObjects); 
} 
Verwandte Themen