2016-06-22 73 views
4

我正在使用Asp.Net核心Azure Web應用程序向客戶端提供RESTful API,並且客戶端無法正確處理分塊。在Asp.Net Core中禁用分塊

是否有可能在控制器級別或web.config中完全關閉Transfer-Encoding: chunked

編輯:我有點返回JsonResult這樣的:

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

    return Json(AuthResultData); 
} 
+1

你有沒有在響應中的 「內容長度」 標頭? –

+0

我已經添加了一個我的動作看起來像的例子。我不添加那個標題,因爲我不知道Json製作的時間會多長。以前,ASP已經添加了該標題,但在最近的服務器中不再使用(可能是因爲遷移到了RC2) –

+1

您可以使用響應緩衝來執行此操作:https://github.com/aspnet/BasicMiddleware/blob/dev/samples /ResponseBufferingSample/Startup.cs#L17 – Tratcher

回答

5

添加響應緩衝能力可以禁用分塊。 參考Microsoft.AspNetCore.Buffering在您的項目,並添加按照Configure方法啓動類的行:

app.UseResponseBuffering(); 

看到這個example in official repo

+0

正如Tratcher上面提到的那樣,這工作正常如果通過VS本地運行,但是當我將服務器部署到Azure Web App時,它將返回到分塊 –

+0

@IainBrown對不起,我沒有仔細看到您的意見......所以,您的問題可能是由IIS配置引起的,還是您使用ARR? –

+0

我不知道ARR是什麼,所以可能不是。這是一個相當香草的AspNetCore MVC應用程序,我們將其部署爲Azure Web App。我們在web.config中唯一改變的是我添加了一個dynamicIpSecurity部分。 –

0

在ASP.NET的核心,這似乎是在主機的工作:

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

指示身份識別功能(即不壓縮,也不修改 )。除非明確指定,否則該令牌總是被認爲是可接受的 。

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

這也適用於當您明確禁用響應緩衝:

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