Example #1
0
        private IReadOnlyDictionary <string, string> BuildThrottlingProperties(HttpContext context, IRequestInfo info)
        {
            var builder = new ThrottlingPropertiesBuilder();

            if (options.AddConsumerProperty)
            {
                builder.AddConsumer(info?.ClientApplicationIdentity);
            }

            if (options.AddPriorityProperty)
            {
                builder.AddPriority(info?.Priority.ToString());
            }

            if (options.AddMethodProperty)
            {
                builder.AddMethod(context.Request.Method);
            }

            if (options.AddUrlProperty)
            {
                builder.AddUrl(UrlNormalizer.NormalizePath(context.Request.Path));
            }

            foreach (var additionalProperty in options.AdditionalProperties)
            {
                var(propertyName, propertyValue) = additionalProperty(context);
                builder.AddProperty(propertyName, propertyValue);
            }

            return(builder.Build());
        }
Example #2
0
        public void Should_correctly_add_all_well_known_properties()
        {
            var properties = builder
                             .AddConsumer("nginx")
                             .AddPriority("ordinary")
                             .AddMethod("GET")
                             .AddUrl("/users")
                             .Build();

            properties.Should().HaveCount(4);
            properties[WellKnownThrottlingProperties.Consumer].Should().Be("nginx");
            properties[WellKnownThrottlingProperties.Priority].Should().Be("ordinary");
            properties[WellKnownThrottlingProperties.Method].Should().Be("GET");
            properties[WellKnownThrottlingProperties.Url].Should().Be("/users");
        }