пустой ответ (завершающий) кусок отсутствует - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть действие контроллера, которое возвращает CSV-документ, созданный асинхронно источником данных.Я подписался на наблюдаемый поток данных и пишу в ответ http с помощью Response.WriteAsync ().Кажется, это работает отдельно от того факта, что завершающий (пустой) блок отсутствует в конце ответа (отсутствующие данные в шестнадцатеричном формате 30 0d 0a 0d 0a для завершающего 0\r\n\r\n).

У меня есть нескольковопросы: - можно ли использовать WriteAsync в этом сценарии - вызывать его несколько раз при поступлении данных - я, конечно, не хочу буферизовать весь набор данных и возвращать его сразу, так как он может вырасти огромным - ответственность за него состоит в том, чтобы писатьзавершающий блок (должен ли он записывать его явно в обработчике OnComplete с помощью WriteAsync?)

пример ответа от действия, которое возвращает объект json (обратите внимание на терминатор в конце ответа):

HTTP/1.1 200 OK
Date: Tue, 05 Feb 2019 09:25:23 GMT
Server: Kestrel
Transfer-Encoding: chunked

21
{"results":[{"statement_id":0}]}

0

Ответ от моего действия:

HTTP/1.1 200 OK
Date: Tue, 05 Feb 2019 09:27:42 GMT
Content-Type: text/csv
Server: Kestrel
Transfer-Encoding: chunked

47
ID,Timestamp,BadQualityCount,MAX_value,MEAN_value,MIN_value,TotalPoints
65
...
5d
SwitchStatus_On_a797c2c2-de78-4fe8-9e4b-5d64f51d1e00,2019-0204T11:52:17.3680000Z,0,0,0,0,1

Код контроллера:

          using (var disposable = observableContent.Subscribe(
                async current =>
                 await Response.WriteAsync(current), 
                () =>
                 {
                     //Response.WriteAsync(Environment.NewLine);
                     //Response.WriteAsync("0");
                     Response.Body.Flush();
                     completed = true;
                 }
            ))

                SpinWait.SpinUntil(() => completed);

            return Ok();

1 Ответ

0 голосов
/ 05 февраля 2019

Оказалось, что терминатор написан правильно, если подпись действия изменяется с Задачи на Задачу.

...