2016-05-25 23 views
13

Attualmente sto lavorando con ASP.NET Core RC2 e sto eseguendo alcuni strani risultati. Così ho un controller MVC con la seguente funzione:ASP.NET Core HTTPRequestMessage restituisce lo strano messaggio JSON

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; 
} 

Se chiamo questo con postino con un header Accept messo in testo normale ottengo questa risposta:

{ 
    "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 
} 

Io davvero non capisco come questa è la risposta generata al controller di cui sopra. È fondamentalmente una serializzazione JSON dell'intero messaggio stesso e non contiene in alcun modo il "blablabla" che intendevo inviare.

L'unico modo che ho ottenuto il risultato desiderato è quello di rendere la mia funzione di controllo ritorno string invece di HttpResponse, ma in questo modo sono in grado di impostare le intestazioni come CacheControl

Quindi la mia domanda è: perché ottengo questo strana risposta? Sembra un comportamento molto strano per me

+0

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

risposta

10

Secondo this article, ASP.NET MVC core non supporta HttpResponseMessage metodi -returning di predefinito.

Se si desidera continuare a utilizzarlo, è possibile, utilizzando WebApiCompatShim:

  1. Aggiungi riferimento per Microsoft.AspNetCore.Mvc.WebApiCompatShim al progetto.
  2. configurarlo in ConfigureServices(): services.AddMvc().AddWebApiConventions();
  3. Impostare percorso per essa in Configure():

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

@ Iarzz11, questa risposta dovrebbe essere accettata. Ha funzionato bene nel mio caso. –

+0

Ho aggiunto il '' Microsoft.AspNetCore.Mvc.WebApiCompatShim ":" 1.1.0 "' al mio 'project.json', ma ho ricevuto questo errore:' Pacchetto Microsoft.AspNet.WebApi.Client 5.2.2 non è compatibile con netcoreapp1 .1 (.NETCoreApp, Version = v1.1) 'Ho usato tutti gli altri numeri' version', ottenendo sempre lo stesso errore. –

+0

@HasanAYousef Penso che sia necessario aggiungere qualcosa come "importazioni": ["portable-net45 + win8"] 'sotto il nodo' "netcoreapp1.1" 'nel progetto.json. (Ma non l'ho ancora provato.) – svick

2

Se si desidera impostare Cache-Control intestazione con il contenuto della stringa, provate questo:

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