Beispiel #1
0
        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);
        }