/// <summary>
        /// Executes the precondition and returns the result.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <param name="defaultResult">The default result.</param>
        /// <param name="localInformation">The local information.</param>
        /// <returns>PreconditionResult.</returns>
        public PreconditionResult GetResult(HttpRequest request, PreconditionResult defaultResult, IPreconditionInformation localInformation)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            if (defaultResult == null)
            {
                throw new ArgumentNullException(nameof(defaultResult));
            }

            if (localInformation == null)
            {
                throw new ArgumentNullException(nameof(localInformation));
            }

            if (HttpPreconditionBuilder.IsMutatingMethod(request.Method))
            {
                return(this.GetResultForMutating(request, defaultResult, localInformation));
            }
            else
            {
                return(this.GetResultForNonMutating(request, defaultResult, localInformation));
            }
        }
        private PreconditionResult ExecutePrecondition(ActionContext actionContext, IPreconditionInformation information)
        {
            var preconditionBuilder = new HttpPreconditionBuilder(actionContext.HttpContext);
            var getResult           = preconditionBuilder.BuildPrecondition(actionContext.HttpContext.Request, this.ActionOptions.MissingPreconditionResult);

            this.Log(TraceEventType.Verbose, "Executing precondition.");

            return(getResult(information));
        }