diff --git a/CompressR.sln b/CompressR.sln index bb250b5..9a3d652 100644 --- a/CompressR.sln +++ b/CompressR.sln @@ -15,11 +15,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CompressR.Sample", "src\Com EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CompressR", "src\CompressR\CompressR.csproj", "{C94378C3-4AA8-4F49-8720-77D14B62F72E}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{99494CD9-7FF3-4FFF-B1A4-51CE56BA2D94}" - ProjectSection(SolutionItems) = preProject - gulpfile.js = gulpfile.js - EndProjectSection -EndProject Global GlobalSection(SharedMSBuildProjectFiles) = preSolution src\CompressR.MVC\CompressR.MVC.projitems*{b8889368-e350-4b1e-82f5-ea537d6da6e9}*SharedItemsImports = 4 diff --git a/src/CompressR.MVC/CompressAttribute.cs b/src/CompressR.MVC/CompressAttribute.cs index 7bfd3d8..1f7dde9 100644 --- a/src/CompressR.MVC/CompressAttribute.cs +++ b/src/CompressR.MVC/CompressAttribute.cs @@ -9,9 +9,16 @@ namespace CompressR.MVC [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class CompressAttribute : System.Web.Mvc.ActionFilterAttribute { + private bool RequireCompression { get; set; } + + public CompressAttribute(bool requireCompression = false) + { + RequireCompression = requireCompression; + } + public override void OnActionExecuting(ActionExecutingContext filterContext) { - CompressFactory.Compress(filterContext); + CompressFactory.Compress(filterContext, RequireCompression); } } } \ No newline at end of file diff --git a/src/CompressR.MVC/CompressFactory.cs b/src/CompressR.MVC/CompressFactory.cs index efa6351..4e4c399 100644 --- a/src/CompressR.MVC/CompressFactory.cs +++ b/src/CompressR.MVC/CompressFactory.cs @@ -1,4 +1,5 @@ -using System; +using CompressR.Exceptions; +using System; using System.Collections.Generic; using System.IO.Compression; using System.Linq; @@ -8,18 +9,28 @@ namespace CompressR.MVC { public static class CompressFactory { - public static void Compress(string compression, System.Web.Mvc.ActionExecutingContext filterContext) + public static void Compress(string compression, System.Web.Mvc.ActionExecutingContext filterContext, bool requireCompression) { var context = filterContext.RequestContext.HttpContext; var compressionAccepted = context.Request.Headers.Get(Constants.AcceptEncoding)?.Split(',').Trim().Any(a => string.Equals(a, compression, StringComparison.OrdinalIgnoreCase)) ?? false; if (!compressionAccepted) { - return; + if (requireCompression) + { + throw new CompressRException("Compression required but client did not send accept header"); + } + else + { + return; + } } + + + HandleCompression(compression, filterContext); } - public static void Compress(System.Web.Mvc.ActionExecutingContext filterContext) + public static void Compress(System.Web.Mvc.ActionExecutingContext filterContext, bool requireCompression) { var context = filterContext.RequestContext.HttpContext; var compressionAlgorithm = context.Request.Headers.Get(Constants.AcceptEncoding)?.Split(',').Trim().Intersect(Constants.Compressors, StringComparer.OrdinalIgnoreCase)?.FirstOrDefault(); @@ -27,6 +38,10 @@ namespace CompressR.MVC { HandleCompression(compressionAlgorithm, filterContext); } + else if(requireCompression) + { + throw new CompressRException("Compression required but client did not send accept header"); + } } private static void HandleCompression(string compression, System.Web.Mvc.ActionExecutingContext filterContext) diff --git a/src/CompressR.MVC/DeflateAttribute.cs b/src/CompressR.MVC/DeflateAttribute.cs index 7bf2de2..c280353 100644 --- a/src/CompressR.MVC/DeflateAttribute.cs +++ b/src/CompressR.MVC/DeflateAttribute.cs @@ -7,6 +7,13 @@ namespace CompressR.MVC [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class DeflateAttribute : System.Web.Mvc.ActionFilterAttribute { + private bool RequireCompression { get; set; } + + public DeflateAttribute(bool requireCompression = false) + { + RequireCompression = requireCompression; + } + /// /// Override to compress the content that is generated by /// an action method. @@ -14,7 +21,7 @@ namespace CompressR.MVC /// public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext) { - CompressFactory.Compress(Constants.Deflate, filterContext); + CompressFactory.Compress(Constants.Deflate, filterContext, RequireCompression); } } } \ No newline at end of file diff --git a/src/CompressR.MVC/GzipAttribute.cs b/src/CompressR.MVC/GzipAttribute.cs index badb05a..c270ff4 100644 --- a/src/CompressR.MVC/GzipAttribute.cs +++ b/src/CompressR.MVC/GzipAttribute.cs @@ -7,6 +7,13 @@ namespace CompressR.MVC [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class GzipAttribute : System.Web.Mvc.ActionFilterAttribute { + private bool RequireCompression { get; set; } + + public GzipAttribute(bool requireCompression = false) + { + RequireCompression = requireCompression; + } + /// /// Override to compress the content that is generated by /// an action method. @@ -14,7 +21,7 @@ namespace CompressR.MVC /// public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext) { - CompressFactory.Compress(Constants.Gzip, filterContext); + CompressFactory.Compress(Constants.Gzip, filterContext, RequireCompression); } } } \ No newline at end of file diff --git a/src/CompressR.WebApi/CompressAttribute.cs b/src/CompressR.WebApi/CompressAttribute.cs index 3ef0d48..2942db3 100644 --- a/src/CompressR.WebApi/CompressAttribute.cs +++ b/src/CompressR.WebApi/CompressAttribute.cs @@ -37,7 +37,7 @@ namespace CompressR.WebApi { if (RequireCompression) { - throw new CompressRException("Compression required but client did not send accept header") + throw new CompressRException("Compression required but client did not send accept header"); } else { diff --git a/src/CompressR.WebApi/DeflateAttribute.cs b/src/CompressR.WebApi/DeflateAttribute.cs index 74a9a2e..a6a8212 100644 --- a/src/CompressR.WebApi/DeflateAttribute.cs +++ b/src/CompressR.WebApi/DeflateAttribute.cs @@ -14,6 +14,13 @@ namespace CompressR.WebApi [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class DeflateAttribute : System.Web.Http.Filters.ActionFilterAttribute { + private bool RequireCompression { get; set; } + + public DeflateAttribute(bool requireCompression = false) + { + RequireCompression = requireCompression; + } + public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) { var acceptedEncoding = actionExecutedContext diff --git a/src/CompressR.WebApi/GzipAttribute.cs b/src/CompressR.WebApi/GzipAttribute.cs index 1bd276a..8d81dc7 100644 --- a/src/CompressR.WebApi/GzipAttribute.cs +++ b/src/CompressR.WebApi/GzipAttribute.cs @@ -13,6 +13,13 @@ namespace CompressR.WebApi [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class GzipAttribute : System.Web.Http.Filters.ActionFilterAttribute { + private bool RequireCompression { get; set; } + + public GzipAttribute(bool requireCompression = false) + { + RequireCompression = requireCompression; + } + public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) { var acceptedEncoding = actionExecutedContext