public bool Build(TransformBuilderContext context, IReadOnlyDictionary <string, string> transformValues) { if (transformValues.TryGetValue(ResponseHeadersCopyKey, out var copyHeaders)) { TransformHelpers.CheckTooManyParameters(transformValues, expected: 1); context.CopyResponseHeaders = bool.Parse(copyHeaders); } else if (transformValues.TryGetValue(ResponseTrailersCopyKey, out copyHeaders)) { TransformHelpers.CheckTooManyParameters(transformValues, expected: 1); context.CopyResponseTrailers = bool.Parse(copyHeaders); } else if (transformValues.TryGetValue(ResponseHeaderKey, out var responseHeaderName)) { var always = false; if (transformValues.TryGetValue(WhenKey, out var whenValue)) { TransformHelpers.CheckTooManyParameters(transformValues, expected: 3); always = string.Equals(AlwaysValue, whenValue, StringComparison.OrdinalIgnoreCase); } else { TransformHelpers.CheckTooManyParameters(transformValues, expected: 2); } if (transformValues.TryGetValue(SetKey, out var setValue)) { context.AddResponseHeader(responseHeaderName, setValue, append: false, always); } else if (transformValues.TryGetValue(AppendKey, out var appendValue)) { context.AddResponseHeader(responseHeaderName, appendValue, append: true, always); } else { throw new ArgumentException($"Unexpected parameters for ResponseHeader: {string.Join(';', transformValues.Keys)}. Expected 'Set' or 'Append'"); } } else if (transformValues.TryGetValue(ResponseTrailerKey, out var responseTrailerName)) { var always = false; if (transformValues.TryGetValue(WhenKey, out var whenValue)) { TransformHelpers.CheckTooManyParameters(transformValues, expected: 3); always = string.Equals(AlwaysValue, whenValue, StringComparison.OrdinalIgnoreCase); } else { TransformHelpers.CheckTooManyParameters(transformValues, expected: 2); } if (transformValues.TryGetValue(SetKey, out var setValue)) { context.AddResponseTrailer(responseTrailerName, setValue, append: false, always); } else if (transformValues.TryGetValue(AppendKey, out var appendValue)) { context.AddResponseTrailer(responseTrailerName, appendValue, append: true, always); } else { throw new ArgumentException($"Unexpected parameters for ResponseTrailer: {string.Join(';', transformValues.Keys)}. Expected 'Set' or 'Append'"); } } else if (transformValues.TryGetValue(ResponseHeaderRemoveKey, out var removeResponseHeaderName)) { var always = false; if (transformValues.TryGetValue(WhenKey, out var whenValue)) { TransformHelpers.CheckTooManyParameters(transformValues, expected: 2); always = string.Equals(AlwaysValue, whenValue, StringComparison.OrdinalIgnoreCase); } else { TransformHelpers.CheckTooManyParameters(transformValues, expected: 1); } context.AddResponseHeaderRemove(removeResponseHeaderName, always); } else if (transformValues.TryGetValue(ResponseTrailerRemoveKey, out var removeResponseTrailerName)) { var always = false; if (transformValues.TryGetValue(WhenKey, out var whenValue)) { TransformHelpers.CheckTooManyParameters(transformValues, expected: 2); always = string.Equals(AlwaysValue, whenValue, StringComparison.OrdinalIgnoreCase); } else { TransformHelpers.CheckTooManyParameters(transformValues, expected: 1); } context.AddResponseTrailerRemove(removeResponseTrailerName, always); } else if (transformValues.TryGetValue(ResponseHeadersAllowedKey, out var allowedHeaders)) { TransformHelpers.CheckTooManyParameters(transformValues, expected: 1); var headersList = allowedHeaders.Split(';', options: StringSplitOptions.RemoveEmptyEntries #if NET | StringSplitOptions.TrimEntries #endif ); context.AddResponseHeadersAllowed(headersList); } else if (transformValues.TryGetValue(ResponseTrailersAllowedKey, out var allowedTrailers)) { TransformHelpers.CheckTooManyParameters(transformValues, expected: 1); var headersList = allowedTrailers.Split(';', options: StringSplitOptions.RemoveEmptyEntries #if NET | StringSplitOptions.TrimEntries #endif ); context.AddResponseTrailersAllowed(headersList); } else { return(false); } return(true); }