Я осуществляю поиск списка людей в 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": ""
},