Add require to all attributes (#2)
This commit is contained in:
committed by
Tommy Parnell
parent
5c44b6345d
commit
9ff7f2e928
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
{
|
||||
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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user