как сжимать вывод отправки приложением asp.net mvc?
Как gzip содержимое в asp.net MVC?
Ответ 1
Вот что я использую (по состоянию на этот момент во времени):
using System.IO.Compression;
public class CompressAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(encodingsAccepted)) return;
encodingsAccepted = encodingsAccepted.ToLowerInvariant();
var response = filterContext.HttpContext.Response;
if (encodingsAccepted.Contains("deflate"))
{
response.AppendHeader("Content-encoding", "deflate");
response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
}
else if (encodingsAccepted.Contains("gzip"))
{
response.AppendHeader("Content-encoding", "gzip");
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
}
}
}
использование в контроллере:
[Compress]
public class BookingController : BaseController
{...}
существуют другие переменные, но это работает довольно хорошо. (Кстати, я использую атрибут [Сжатие] на моем BaseController для сохранения дублирования в проекте, тогда как выше это делается на контроллере по принципу контроллера.
[Изменить], как указано в параграфе выше. для упрощения использования вы также можете включить [Compress]
oneshot в самом базовом контроллере, таким образом, каждый унаследованный дочерний контроллер получает доступ к функциям по умолчанию:
[Compress]
public class BaseController : Controller
{...}
Ответ 2
Взгляните на эту статью, в которой описывается отличный метод использования фильтров действий
например.
[CompressFilter]
public void Category(string name, int? page)
И в качестве дополнительного бонуса он также включает CacheFilter
Ответ 3
Вы также можете увеличить производительность, используя сжатие и кэширование для данных ответа. Посмотрите на следующую ссылку: -
http://weblogs.asp.net/rashid/asp-net-mvc-action-filter-caching-and-compression