public async void OnActionExecuting(ActionExecutingContext context)
        {
            string state = String.Empty, address = String.Empty, county = String.Empty, startDate = String.Empty, endDate = String.Empty;

            if (context.ActionArguments.ContainsKey("state"))
            {
                state = context.ActionArguments["state"] as string;
            }
            if (context.ActionArguments.ContainsKey("address"))
            {
                address = context.ActionArguments["address"] as string;
            }
            if (context.ActionArguments.ContainsKey("county"))
            {
                county = context.ActionArguments["county"] as string;
            }
            if (context.ActionArguments.ContainsKey("endDate"))
            {
                endDate = context.ActionArguments["endDate"] as string;
            }
            if (context.ActionArguments.ContainsKey("startDate"))
            {
                startDate = context.ActionArguments["startDate"] as string;
            }

            if (!String.IsNullOrWhiteSpace(address))
            {
                var geoAddress = await _geocodingService.GeocodeAddress(address);

                county = geoAddress.County;
                state  = geoAddress.State;
                if (String.IsNullOrWhiteSpace(state))
                {
                    context.Result = new UnprocessableEntityObjectResult("Address not found");
                    return;
                }
            }
            // check for input paramters
            if ((String.IsNullOrEmpty(county) && String.IsNullOrEmpty(state)) || String.IsNullOrEmpty(state))
            {
                context.Result = new BadRequestObjectResult("Please provide location parameters 'county' and 'state', or 'state'");
                return;
            }
            // check db for valid location name
            if (!String.IsNullOrEmpty(county) && !_countyService.IsValidCounty(county, state))
            {
                context.Result = new UnprocessableEntityObjectResult("Please provide a valid county and state.");
                return;
            }
            else if (!_countyService.IsValidState(state))
            {
                context.Result = new UnprocessableEntityObjectResult("Please provide a valid state name.");
                return;
            }

            var sDate = DateTime.MinValue;
            var eDate = DateTime.MaxValue;

            if ((!String.IsNullOrEmpty(startDate) && !DateTime.TryParse(startDate, out sDate)) ||
                (!String.IsNullOrEmpty(endDate) && !DateTime.TryParse(endDate, out eDate)))
            {
                context.Result = new UnprocessableEntityObjectResult("Invalid Date");
                return;
            }
            if (sDate > eDate)
            {
                context.Result = new BadRequestObjectResult("Start Date cannot be after End Date");
                return;
            }

            context.HttpContext.Items.Add("sDate", sDate);
            context.HttpContext.Items.Add("eDate", eDate);
        }