LSTANCZYK
3/21/2017 - 4:44 PM

CamelCasingFilterAttribute

using System;
using System.Net.Http;
using System.Net.Http.Formatting;
using System.Web.Http.Filters;
using Newtonsoft.Json.Serialization;

namespace Filters
{
	[AttributeUsage(AttributeTargets.All)]
	public class CamelCasingFilterAttribute : ActionFilterAttribute
	{
		private static readonly JsonMediaTypeFormatter _camelCasingFormatter = new JsonMediaTypeFormatter();

		static CamelCasingFilterAttribute()
		{
			_camelCasingFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
		}

		public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
		{
			if (actionExecutedContext == null) return;

			if (actionExecutedContext.Response == null) return;

			var content = actionExecutedContext.Response.Content as ObjectContent;
			
			if (content == null) return;
			
			if (content.Formatter is JsonMediaTypeFormatter) {
				actionExecutedContext.Response.Content = new ObjectContent(content.ObjectType, content.Value, _camelCasingFormatter);
			}
		}
	}
}