Как можно сжать объект Json Action Result в .Net Core? - PullRequest
0 голосов
/ 30 октября 2018

Я осуществляю поиск списка людей в MVC ASP.Net Core 2.1. Первоначально никаких записей нет, и пользователь вводит некоторые фильтры и возвращает людей. В настоящее время максимальное количество записей составляет 400 000, и поэтому, если они возвращают все записи, мы в конечном итоге отправляем 80 МБ данных обратно на запрос ajax, который затем перебираем. Это может немного увеличиться, так как конечный размер базы данных будет больше, чем в настоящее время.

Сначала мы получаем данные с помощью LINQ, а затем возвращаем перечислимое, которое отправляем обратно как объект результата JSON.

 [HttpGet]
 public async Task<IActionResult> GetPeopleList(FilterPersonListViewModel model)
 {
        _logger.LogInformation(
             message: GetLogDetail());

        //check if model is empty and if so send a empty collection back to initialise the table

        if (IsFilterModelValid(model))
        {
            ICollection<PersonEntityListViewModel> elvm = new List<PersonEntityListViewModel>();
            return Json(elvm);
        }
        bool isCanstat = _userService.IsInRole(User, Constants.Role.Canstat);
        var result = await _entityService.GetFilterPersonListViewModelAsync(model, isCanstat);
        var data = result.Model;

        return Json(data);       
 }

Затем я добавил промежуточное программное обеспечение для использования сжатия Gzip в моем файле Startup.cs, добавив строку ConfigureServices и Configure, как сказано в https://docs.microsoft.com/en-us/aspnet/core/performance/response-compression?view=aspnetcore-2.1. Проблема в том, что он не говорит, как отправить ответ как Gzip. Там написано: «Отправьте запрос в пример приложения с заголовком Accept-Encoding: gzip и убедитесь, что ответ сжат». но это не говорит, как я бы включил этот заголовок в моем ответе.

Должен ли я делать что-то особенное для сжатия моего объекта данных, когда я отправляю его обратно как Json? Я нашел несколько разных статей, касающихся сжатия его через GzipStream, но потом я не могу отправить его обратно как ActionResult, как это может показаться?

"ajax": {
            "url": "/Person/GetPeopleList",
            "type": "GET",
            //"contentType": "application/json",
            "data": function (d) {
                setFilterData();
                Object.assign(d, filterData);
                return d;
            },
            "dataSrc": ""
        },

1 Ответ

0 голосов
/ 01 ноября 2018

Хорошо, мне нужно было включить EnableHttps = true для настройки промежуточного программного обеспечения. Случайно просмотрел это, когда читал страницу. После того, как он добавил, что все заработало как надо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...