Разделенный ответ функции 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();
    }
}
Другие вопросы по тегам