2016-02-24 4 views
1

Мы разрабатываем API бэкэнд с использованием Nancy. Помимо хостинга с использованием IIS, мы используем его с помощью Owin. Поскольку Owin не обрабатывает сжатие gzip автоматически (как это делает IIS), нам нужно ввести посредника для обработки сжатия/сжатия сжатия/запроса. Есть ли уже имеющиеся библиотеки? Если нет доступных библиотек, что это лучший способ сделать это?Обработка сжатия gzip в Nancy/Owin

+0

Вот ссылка на проект с открытым исходным кодом. https://github.com/Thorium/Owin.Compression –

ответ

1
using System.IO.Compression; 

    protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines) 
    { 
     pipelines.AfterRequest.AddItemToEndOfPipeline(AddGZip); 
    } 


private void AddGZip(NancyContext context) 
    { 
     if ((!context.Response.ContentType.Contains("application/json")) || !context.Request.Headers.AcceptEncoding.Any(
       x => x.Contains("gzip")) || !CompressResponse(context.Request.Url.ToString())) return; 
     var jsonData = new MemoryStream(); 

     context.Response.Contents.Invoke(jsonData); 
     jsonData.Position = 0; 
     context.Response.Headers["Content-Encoding"] = "gzip"; 
     context.Response.Contents = s => 
     { 
      var gzip = new GZipStream(s, CompressionMode.Compress, true); 
      jsonData.CopyTo(gzip); 
      gzip.Close(); 
     }; 
    } 
Смежные вопросы