У меня есть веб-API ASP.NET со следующим действием контроллера для обслуживания, возможно, больших (< 1-200 МБ) 3D-моделей, которые хранятся в формате JSON где-то на диске (за пределами веб-корень):Как сжимать и кэшировать файлы с помощью IIS, когда имя файла определяется контроллером ASP.NET Web API
public HttpResponseMessage GetModel(Guid accessToken, Guid modelId)
{
Guid projectId = MyBackend.Validate(accessToken);
string fileName = MyPaths.GetModelFile(projectId, modelId);
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(File.ReadAllText(fileName),
Encoding.UTF8, "application/json");
return response;
}
в моей Global.asax у меня есть эта строка:
GlobalConfiguration.Configuration.MessageHandlers.Insert(
0, new ServerCompressionHandler(new GZipCompressor(), new DeflateCompressor()));
Когда я вызываю API конечной точки, содержание сжат GZIP, как ожидается, , но IIS (8.5) не кэширует сжатые результаты, поэтому он должен повторно компилировать s соответствующий файл для каждого запроса. Я ожидаю, что он не кэшируется, потому что контроллер считывает JSON в память и обслуживает его как StringContent
.
Я почти ничего не знаю о IIS и немного об ASP.NET Web API. Как я могу лучше всего обслуживать файлы JSON, чтобы они были сжаты И убедитесь, что IIS кэширует сжатые результаты, чтобы их не нужно было повторно сжимать каждый раз? (И если по какой-то причине это звучит как плохая идея, что я должен делать?)