public override Task ExecuteBindingAsync(ModelMetadataProvider metadataProvider, HttpActionContext actionContext, CancellationToken cancellationToken)
        {
            return(_traceWriter.TraceBeginEndAsync(
                       actionContext.Request,
                       TraceCategories.ModelBindingCategory,
                       TraceLevel.Info,
                       _innerBinding.GetType().Name,
                       ExecuteBindingAsyncMethodName,
                       beginTrace: (tr) =>
            {
                tr.Message = Error.Format(SRResources.TraceBeginParameterBind,
                                          _innerBinding.Descriptor.ParameterName);
            },

                       execute: () => _innerBinding.ExecuteBindingAsync(metadataProvider, actionContext, cancellationToken),

                       endTrace: (tr) =>
            {
                string parameterName = _innerBinding.Descriptor.ParameterName;
                tr.Message = actionContext.ActionArguments.ContainsKey(parameterName)
                                    ? Error.Format(SRResources.TraceEndParameterBind, parameterName,
                                                   FormattingUtilities.ValueToString(actionContext.ActionArguments[parameterName], CultureInfo.CurrentCulture))
                                    : Error.Format(SRResources.TraceEndParameterBindNoBind,
                                                   parameterName);
            },
                       errorTrace: null));
        }