2016-05-25 12 views
13

Obecnie pracuję z ASP.NET Core RC2 i mam pewne dziwne wyniki. Mam więc kontroler MVC z następującą funkcją:Rdzeń ASP.NET HTTPRequestMessage zwraca dziwną wiadomość 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; 
} 

Jeśli zgłoszę to z listonosza z nagłówka Accept ustawiony na zwykły tekst mam tej odpowiedzi:

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

ja naprawdę nie rozumiem jak to jest wygenerowana odpowiedź na powyższy kontroler. Jest to w zasadzie serializacja JSON całego komunikatu i w żaden sposób nie zawiera "blablabla", który zamierzałem wysłać.

Jedyny sposób mam zdobyć pożądany rezultat jest poprzez mojego kontrolera funkcji zwrot string zamiast HttpResponse, ale w ten sposób nie jestem w stanie ustawić nagłówki jak CacheControl

więc moje pytanie brzmi: dlaczego mam to dziwna odpowiedź? Wydaje się bardzo dziwne zachowanie mi

+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

Odpowiedz

10

Według this article, ASP.NET MVC rdzenia nie obsługuje HttpResponseMessage metod -returning autorem domyślna.

Jeśli chcesz zachować używając go, można, za pomocą WebApiCompatShim:

  1. Dodaj odwołanie do Microsoft.AspNetCore.Mvc.WebApiCompatShim do projektu.
  2. skonfigurować go w ConfigureServices(): services.AddMvc().AddWebApiConventions();
  3. Konfiguracja trasy dla niego w Configure():

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

@ Iarzz11, ta odpowiedź powinna zostać przyjęta. To zadziałało dobrze dla mnie. –

+0

Dodałem '' Microsoft.AspNetCore.Mvc.WebApiCompatShim ":" 1.1.0 "' do mojego 'project.json' ale dostałem ten błąd:' Pakiet Microsoft.AspNet.WebApi.Client 5.2.2 nie jest kompatybilny z netcoreapp1 .1 (.NETCoreApp, Version = v1.1) 'użyłem wszystkich innych numerów' version', ciągle otrzymuję ten sam błąd. –

+0

@HasanAYousef Myślę, że musisz dodać coś w rodzaju '" import ": [" portable-net45 + win8 "]' pod węzłem '" netcoreapp1.1 "' w twoim project.json. (Ale nie przetestowałem tego.) – svick

2

Jeśli chcesz ustawić Cache-Control nagłówek z zawartością strun, spróbuj tego:

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