public override void OnResultExecuted(ResultExecutedContext context)
		{
			if (_suppressResultFiltering)
				return;

			HttpResponseBase response = context.HttpContext.Response;
			CaptureFilter filter = (response.Filter as CaptureFilter);
			if (filter == null)
				return;

			response.Flush();
			response.Filter = _filter;

			string content = filter.GetContents(response.ContentEncoding);
			response.Write(content);

			if (context.Exception == null)
				UpdateCachedValue(_cacheKey, content);
		}
		public virtual void OnResultExecuted(ResultExecutedContext context)
		{
		}
        private static ResultExecutedContext InvokeActionResultFilter(IResultFilter filter, 
            ResultExecutionContext context, Func<ResultExecutedContext> continuation)
        {
            filter.OnResultExecuting(context);

            if (context.Cancel)
                return new ResultExecutedContext(context, null);

            bool wasError = false;
            ResultExecutedContext postContext = null;
            try
            {
                postContext = continuation();
            }
            catch (ThreadAbortException)
            {
                // This type of exception occurs as a result of Response.Redirect(), but we special-case so that
                // the filters don't see this as an error.
                postContext = new ResultExecutedContext(context, null);
                filter.OnResultExecuted(postContext);

                throw;
            }
            catch (Exception ex)
            {
                wasError = true;
                postContext = new ResultExecutedContext(context, ex);
                filter.OnResultExecuted(postContext);
                
                if (!postContext.ExceptionHandled)
                    throw;
            }
            if (!wasError)
                filter.OnResultExecuted(postContext);
            
            return postContext;
        }