/// <summary> /// Create a copy of the request builder with the specified request URI query parameter. /// </summary> /// <typeparam name="TContext"> /// The type of object used by the request when resolving deferred template parameters. /// </typeparam> /// <param name="request"> /// The HTTP request. /// </param> /// <param name="name"> /// The parameter name. /// </param> /// <param name="valueProvider"> /// Delegate that, given the current context, returns the parameter value (cannot be <c>null</c>). /// </param> /// <returns> /// The new <see cref="HttpRequest{TContext}"/>. /// </returns> public static HttpRequest <TContext> WithQueryParameterFromProvider <TContext>(this HttpRequest <TContext> request, string name, IValueProvider <TContext, object> valueProvider) { if (request == null) { throw new ArgumentNullException(nameof(request)); } if (String.IsNullOrWhiteSpace(name)) { throw new ArgumentException("Argument cannot be null, empty, or composed entirely of whitespace: 'name'.", nameof(name)); } if (valueProvider == null) { throw new ArgumentNullException(nameof(valueProvider)); } return(request.Clone(properties => { properties[nameof(HttpRequest.QueryParameters)] = request.QueryParameters.SetItem( key: name, value: valueProvider.Convert().ValueToString() ); })); }