Si vous avez accès au code de CompressFilter, c'est. Vous pouvez ajouter un second attribut. Par exemple NoCompressAttribute. Dans la méthode OnActionExecuting du CompressFilter, vous regardez les ActionDescriptors et si le NoCompressAttribute est appliqué, vous ne faites pas la compression.
EDIT: Voici le code
public class CompressFilter : ActionFilterAttribute
{
public bool Compress { get; set; }
public CompressFilter()
{
Compress = true;
}
public CompressFilter(bool compress)
{
Compress = compress;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var compressAttribs = filterContext.ActionDescriptor.GetCustomAttributes(typeof(CompressFilter), true);
foreach (var item in compressAttribs)
{
if (!((CompressFilter)item).Compress)
{
return;
}
}
HttpRequestBase request = filterContext.HttpContext.Request;
string acceptEncoding = request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(acceptEncoding)) return;
acceptEncoding = acceptEncoding.ToUpperInvariant();
HttpResponseBase response = filterContext.HttpContext.Response;
if (acceptEncoding.Contains("GZIP"))
{
response.AppendHeader("Content-encoding", "gzip");
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
}
else if (acceptEncoding.Contains("DEFLATE"))
{
response.AppendHeader("Content-encoding", "deflate");
response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
}
}
}
Et puis sur l'action que vous ne voulez pas faire la compression:
[CompressFilter(false)]
public virtual ActionResult Index()
{
}
espoir qui aide
semble bon. Merci! – Egor4eg
Mais .. Dans ce cas, ce code est exécuté 2 fois pour chaque requête. Chose laide. Je vais utiliser la première option (avec NoCompressAttribute). Je pense que c'est plus logique. – Egor4eg
Je suis d'accord. C'est probablement une meilleure idée. C'était plus facile lorsque je démostrais l'idée car j'avais seulement besoin d'une classe. –