我正在使用 ASP.NET Core Azure Web 应用程序向客户端提供 RESTful API,但客户端无法正确处理分块。
是否可以完全关闭Transfer-Encoding: chunked
,无论是在控制器级别还是在文件中网络配置?
我返回的 JsonResult 有点像这样:
[HttpPost]
[Produces("application/json")]
public IActionResult Post([FromBody] AuthRequest RequestData)
{
AuthResult AuthResultData = new AuthResult();
return Json(AuthResultData);
}
如何摆脱 .NET Core 2.2 中的分块:
诀窍是阅读响应体到你自己的MemoryStream中,这样你就可以获得长度。完成此操作后,您可以设置内容长度标头,IIS 不会对其进行分块。我认为这也适用于 Azure,但我还没有测试过。
这是中间件:
public class DeChunkerMiddleware
{
private readonly RequestDelegate _next;
public DeChunkerMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
var originalBodyStream = context.Response.Body;
using (var responseBody = new MemoryStream())
{
context.Response.Body = responseBody;
long length = 0;
context.Response.OnStarting(() =>
{
context.Response.Headers.ContentLength = length;
return Task.CompletedTask;
});
await _next(context);
// If you want to read the body, uncomment these lines.
//context.Response.Body.Seek(0, SeekOrigin.Begin);
//var body = await new StreamReader(context.Response.Body).ReadToEndAsync();
length = context.Response.Body.Length;
context.Response.Body.Seek(0, SeekOrigin.Begin);
await responseBody.CopyToAsync(originalBodyStream);
}
}
}
然后在启动中添加:
app.UseMiddleware<DeChunkerMiddleware>();
必须在之前app.UseMvC()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)