2016-06-22 16 views
4

Ich verwende eine Asp.Net Core Azure-Webanwendung, um einem Client eine RESTful-API bereitzustellen, und der Client verarbeitet das Chunking nicht korrekt.Chunking in Asp.Net Core deaktivieren

Ist es möglich, Transfer-Encoding: chunked entweder auf der Controller-Ebene oder in web.config vollständig auszuschalten?

EDIT: Ich bin ein zurückkehr JsonResult etwas wie folgt aus:

[HttpPost] 
[Produces("application/json")] 
public IActionResult Post([FromBody] AuthRequest RequestData) 
{ 
    AuthResult AuthResultData = new AuthResult(); 

    return Json(AuthResultData); 
} 
+1

Haben Sie den "Content-Length" Header in der Antwort haben? –

+0

Ich habe ein Beispiel hinzugefügt, wie meine Aktion aussieht. Ich füge diesen Header nicht hinzu, da ich keine Ahnung habe, wie lange der JSON produziert wird. Zuvor hat ASP diesen Header hinzugefügt, aber in den letzten Servern nicht mehr (möglicherweise seit dem Wechsel zu RC2) –

+1

Sie können dies mit Antwortpufferung tun: https://github.com/aspnet/BasicMiddleware/blob/dev/samples /ResponseBufferingSample/Startup.cs#L17 – Tratcher

Antwort

5

Antwortpufferung Fähigkeit hinzufügen können Chunking deaktivieren. Referenz Microsoft.AspNetCore.Buffering in Ihrem Projekt und fügen Sie in Configure Methode der Startklasse folgende Zeile:

app.UseResponseBuffering(); 

Sehen Sie diese example in official repo

+0

Wie erwähnt, wenn Tratcher dies oben vorgeschlagen, funktioniert das gut Wenn ich lokal über VS arbeite, aber wenn ich meinen Server auf eine Azure Web App stelle, wird es wieder chunked –

+0

@IainBrown Sorry Ich habe Ihre Kommentare nicht sorgfältig gelesen ... so könnte Ihr Problem durch IIS-Konfiguration verursacht werden, oder haben Sie ARR benutzen? –

+0

Ich weiß nicht, was ARR ist, also wahrscheinlich nicht. Es ist eine ziemlich normale AspNetCore MVC-App, die wir als Azure Web App bereitstellen. Das einzige, was wir in unserer web.config geändert haben, ist, dass ich einen Abschnitt dynamicIpSecurity hinzugefügt habe. –

0

In ASP.NET Kern scheint dies über Hosts zu arbeiten:

response.Headers["Content-Encoding"] = "identity"; 
response.Headers["Transfer-Encoding"] = "identity"; 

Zeigt die Identitätsfunktion an (dh keine Komprimierung, keine Modifikation). Dieses Token wird, sofern nicht explizit angegeben, immer als akzeptabel erachtet.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Transfer-Encoding

Dies funktioniert auch, wenn Sie ausdrücklich Antwortpufferung deaktivieren:

var bufferingFeature = httpContext.Features.Get<IHttpBufferingFeature>(); 
bufferingFeature?.DisableResponseBuffering();