Разделенный ответ функции Azure не может быть загружен в Chrome ERR_INCOMPLETE_CHUNKED_ENCODING
Я создаю функцию Azure, которая возвращает частичный ответ (используя await response.WriteAsync(...)
). Когда я открываю URL-адрес функции Azure в Chrome, я получаю сообщение об ошибке: Chunked: 1 GET http://localhost:7071/api/Chunked net:: ERR_INCOMPLETE_CHUNKED_ENCODING 200 (ОК)
Эта ошибка происходит в большинстве случаев, но иногда я получаю правильный результат. Однако когда я открываю тот же URL из Edge, ответ всегда загружается правильно. Я запускаю код локально из Visual Studio 15.8.7, функция Runtime версия: 2.0.12134.0,
Я создал минимальное воспроизведение:
[FunctionName("Chunked")]
public static async Task Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
var res = req.HttpContext.Response;
res.StatusCode = 200;
var token = " Lorem ipsum ";
await res.WriteAsync(token);
for (int i = 0; i < 100; i++)
{
token += token;
if (token.Length > 2000)
token = " Lorem ipsum ";
await res.WriteAsync(i + token + "\n");
await Task.Delay(10); // Simulate wait for another record
}
}
Мой код более сложный, потому что он читает содержимое из базы данных, но я смоделировал его с помощью Task.Delay.
1 ответ
ASP.NET:
Попробуйте установить req.HttpContext.Response.BufferOutput
ложно. Буферизация ответа может помешать правильному разбиению ответа.
Для ASP.NET Core это подходит:
private void DisableResponseBuffering(HttpContext context)
{
IHttpBufferingFeature bufferingFeature = context.Features.Get<IHttpBufferingFeature>();
if (bufferingFeature != null)
{
bufferingFeature.DisableResponseBuffering();
}
}