2016-05-25 9 views
13

Ich arbeite derzeit mit ASP.NET Core RC2 und ich komme in einige seltsame Ergebnisse. So habe ich einen MVC-Controller mit der folgenden Funktion:ASP.NET Core HTTPRequestMessage gibt seltsame JSON-Nachricht zurück

public HttpResponseMessage Tunnel() { 
    var message = new HttpResponseMessage(HttpStatusCode.OK); 
    message.Content = new StringContent("blablabla", Encoding.UTF8); 
    message.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/plain"); 
    message.Headers.CacheControl = new System.Net.Http.Headers.CacheControlHeaderValue { 
     NoCache = true 
    }; 

    return message; 
} 

Wenn ich diesen Satz Accept mit Postbote rufe mit einem Kopf Ebene in Text erhalte ich diese Antwort:

{ 
    "Version": { 
    "Major": 1, 
    "Minor": 1, 
    "Build": -1, 
    "Revision": -1, 
    "MajorRevision": -1, 
    "MinorRevision": -1 
    }, 
    "Content": { 
    "Headers": [ 
     { 
     "Key": "Content-Type", 
     "Value": [ 
      "text/plain" 
     ] 
     } 
    ] 
    }, 
    "StatusCode": 200, 
    "ReasonPhrase": "OK", 
    "Headers": [ 
    { 
     "Key": "Cache-Control", 
     "Value": [ 
     "no-cache" 
     ] 
    } 
    ], 
    "RequestMessage": null, 
    "IsSuccessStatusCode": true 
} 

Ich verstehe nicht wirklich, wie dies die generierte Antwort auf den obigen Controller ist. Es ist im Grunde eine JSON-Serialisierung der gesamten Nachricht selbst und enthält in keiner Weise das "blablabla", das ich senden wollte.

Die einzige Art, wie ich das gewünschte Ergebnis bekommen haben, ist durch meine Controller-Funktion Rückkehr string statt HttpResponse zu machen, aber auf diese Weise kann ich nicht Header setzen wie CacheControl

Also meine Frage ist: Warum bekomme ich diese seltsame Antwort? Es scheint, wie sehr seltsame Verhalten mir

+0

http://stackoverflow.com/questions/35749928/mvc6-web-api-return-plain-text, http://stackoverflow.com/questions/34853072/how-to -return-file-from-asp-net-5-web-api – CodeCaster

Antwort

10

Nach this article, ASP.NET MVC-Core nicht HttpResponseMessage -returning Methoden unterstützt durch Standard.

Wenn Sie möchten, verwenden sie zu halten, können Sie, indem WebApiCompatShim mit:

  1. In Bezug auf Microsoft.AspNetCore.Mvc.WebApiCompatShim zu Ihrem Projekt.
  2. konfigurieren es in ConfigureServices(): services.AddMvc().AddWebApiConventions();
  3. einrichten Route für sie in Configure():

    app.UseMvc(routes => 
    { 
        routes.MapWebApiRoute(
         name: "default", 
         template: "{controller=Home}/{action=Index}/{id?}"); 
    }); 
    
+0

@ Iarzzz11, diese Antwort sollte akzeptiert werden. Es hat gut für mich funktioniert. –

+0

Ich habe '' Microsoft.AspNetCore.Mvc.WebApiCompatShim ":" 1.1.0 "' zu meinem 'project.json' hinzugefügt, aber habe diesen Fehler bekommen:' Paket Microsoft.AspNet.WebApi.Client 5.2.2 ist nicht kompatibel mit netcoreapp1 .1 (.NETCoreApp, Version = v1.1) 'Ich habe alle anderen Versionsnummern verwendet, immer noch den gleichen Fehler. –

+0

@HasanAYousef Ich denke, Sie müssen etwas wie "" importieren "hinzufügen: [" portable-net45 + win8 "]' unter dem Knoten "netcoreapp1.1" in Ihrem Projekt.json. (Aber ich habe das nicht getestet.) – svick

2

Wenn Sie Cache-Control Header mit String Inhalt festlegen möchten, versuchen Sie dies:

[Produces("text/plain")] 
public string Tunnel() 
{ 
    Response.Headers.Add("Cache-Control", "no-cache"); 
    return "blablabla"; 
} 
Verwandte Themen