Add require to all attributes (#2)

This commit is contained in:
Brian Kennedy
2016-06-20 10:56:45 -04:00
committed by Tommy Parnell
parent 5c44b6345d
commit 9ff7f2e928
8 changed files with 58 additions and 13 deletions

View File

@@ -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

View File

@@ -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);
}
}
}

View File

@@ -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)

View File

@@ -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;
}
/// <summary>
/// Override to compress the content that is generated by
/// an action method.
@@ -14,7 +21,7 @@ namespace CompressR.MVC
/// <param name="filterContext"></param>
public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
{
CompressFactory.Compress(Constants.Deflate, filterContext);
CompressFactory.Compress(Constants.Deflate, filterContext, RequireCompression);
}
}
}

View File

@@ -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;
}
/// <summary>
/// Override to compress the content that is generated by
/// an action method.
@@ -14,7 +21,7 @@ namespace CompressR.MVC
/// <param name="filterContext"></param>
public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
{
CompressFactory.Compress(Constants.Gzip, filterContext);
CompressFactory.Compress(Constants.Gzip, filterContext, RequireCompression);
}
}
}

View File

@@ -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
{

View File

@@ -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

View File

@@ -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