Ejemplo n.º 1
0
        private List <MediaTypeSegmentWithQuality> GetMediaTypes(
            MediaTypeCollection contentTypes,
            HttpRequest request)
        {
            var result = new List <MediaTypeSegmentWithQuality>();

            AcceptHeaderParser.ParseAcceptHeader(request.Headers[HeaderNames.Accept], result);
            for (int i = 0; i < result.Count; i++)
            {
                var mediaType = new MediaType(result[i].MediaType);
                if (!RespectBrowserAcceptHeader && mediaType.MatchesAllSubTypes && mediaType.MatchesAllTypes)
                {
                    result.Clear();
                    return(result);
                }

                if (!InAcceptableMediaTypes(result[i].MediaType, contentTypes))
                {
                    result.RemoveAt(i);
                }
            }

            result.Sort((left, right) => left.Quality > right.Quality ? -1 : (left.Quality == right.Quality ? 0 : 1));

            return(result);
        }
Ejemplo n.º 2
0
    public void ParseAcceptHeader_GracefullyRecoversFromInvalidMediaTypeValues_AndReturnsValidMediaTypes(
        string[] acceptHeader,
        string[] expected)
    {
        // Arrange
        var expectedMediaTypes = expected.Select(e => new MediaTypeSegmentWithQuality(new StringSegment(e), 1.0)).ToList();

        // Act
        var parsed = AcceptHeaderParser.ParseAcceptHeader(acceptHeader);

        // Assert
        Assert.Equal(expectedMediaTypes, parsed);
    }
Ejemplo n.º 3
0
    public void ParseAcceptHeader_DelimiterAtStart()
    {
        // Arrange
        var expected = new MediaTypeSegmentWithQuality[0];

        var input = ",;:";

        // Act
        var parsed = AcceptHeaderParser.ParseAcceptHeader(new List <string>()
        {
            input
        });

        // Assert
        Assert.Equal(expected, parsed);
    }
Ejemplo n.º 4
0
    public void ParseAcceptHeader_InvalidTokenAtEnd()
    {
        // Arrange
        var expected = new MediaTypeSegmentWithQuality[0];

        var input = "*/*:";

        // Act
        var parsed = AcceptHeaderParser.ParseAcceptHeader(new List <string>()
        {
            input
        });

        // Assert
        Assert.Equal(expected, parsed);
    }
        public void ParseAcceptHeader_GracefullyRecoversFromInvalidMediaTypeValues_AndReturnsValidMediaTypes(
            string acceptHeader,
            string expected)
        {
            // Arrange
            var expectedMediaTypes = expected
                                     .Split(new [] { "," }, StringSplitOptions.RemoveEmptyEntries)
                                     .Select(e => new MediaTypeSegmentWithQuality(new StringSegment(e), 1.0))
                                     .ToList();

            // Act
            var parsed = AcceptHeaderParser.ParseAcceptHeader(acceptHeader.Split(new [] { "," }, StringSplitOptions.RemoveEmptyEntries));

            // Assert
            expectedMediaTypes.Should().BeEquivalentTo(parsed);
        }
        public void ParseAcceptHeader_InvalidTokenAtStart()
        {
            // Arrange
            var expected = new MediaTypeSegmentWithQuality[0];

            var input = ":;:";

            // Act
            var parsed = AcceptHeaderParser.ParseAcceptHeader(new List <string>()
            {
                input
            });

            // Assert
            expected.Should().Equal(parsed);
        }
Ejemplo n.º 7
0
    public void ParseAcceptHeader_ValidMediaType_FollowedBySemicolon()
    {
        // Arrange
        var expected = new MediaTypeSegmentWithQuality[0];

        var input = "*/*Content-Type;application/json";

        // Act
        var parsed = AcceptHeaderParser.ParseAcceptHeader(new List <string>()
        {
            input
        });

        // Assert
        Assert.Equal(expected, parsed);
    }
        public void ParseAcceptHeader_ValidMediaType_FollowedByNondelimiter()
        {
            // Arrange
            var expected = new MediaTypeSegmentWithQuality[0];

            var input = "*/*Content-Type:application/json";

            // Act
            var parsed = AcceptHeaderParser.ParseAcceptHeader(new List <string>()
            {
                input
            });

            // Assert
            expected.Should().Equal(parsed);
        }
Ejemplo n.º 9
0
    public void ParseAcceptHeader_ParsesSimpleHeader()
    {
        // Arrange
        var header   = "application/json";
        var expected = new List <MediaTypeSegmentWithQuality>
        {
            new MediaTypeSegmentWithQuality(new StringSegment("application/json"), 1.0)
        };

        // Act
        var parsed = AcceptHeaderParser.ParseAcceptHeader(new List <string> {
            header
        });

        // Assert
        Assert.Equal(expected, parsed);
    }
Ejemplo n.º 10
0
    public void ParseAcceptHeader_ParsesSimpleHeaderWithMultipleValues_InvalidFormat()
    {
        // Arrange
        var header             = "application/json, application/xml,;q=0.8";
        var expectedMediaTypes = new List <MediaTypeSegmentWithQuality>
        {
            new MediaTypeSegmentWithQuality(new StringSegment("application/json"), 1.0),
            new MediaTypeSegmentWithQuality(new StringSegment("application/xml"), 1.0),
        };

        // Act
        var mediaTypes = AcceptHeaderParser.ParseAcceptHeader(new List <string> {
            header
        });

        // Assert
        Assert.Equal(expectedMediaTypes, mediaTypes);
    }
Ejemplo n.º 11
0
    public void ParseAcceptHeader_ParsesMultipleHeaderValues()
    {
        // Arrange
        var expected = new List <MediaTypeSegmentWithQuality>
        {
            new MediaTypeSegmentWithQuality(new StringSegment("application/json"), 1.0),
            new MediaTypeSegmentWithQuality(new StringSegment("application/xml;q=0.8"), 0.8)
        };

        // Act
        var parsed = AcceptHeaderParser.ParseAcceptHeader(
            new List <string> {
            "application/json", "", "application/xml;q=0.8"
        });

        // Assert
        Assert.Equal(expected, parsed);
    }
Ejemplo n.º 12
0
        private List <MediaTypeSegmentWithQuality> GetAcceptableMediaTypes(MazeRequest request)
        {
            var result = new List <MediaTypeSegmentWithQuality>();

            AcceptHeaderParser.ParseAcceptHeader(request.Headers[HeaderNames.Accept], result);
            for (var i = 0; i < result.Count; i++)
            {
                var mediaType = new MediaType(result[i].MediaType);
                if (!_respectBrowserAcceptHeader && mediaType.MatchesAllSubTypes && mediaType.MatchesAllTypes)
                {
                    result.Clear();
                    return(result);
                }
            }

            result.Sort(_sortFunction);

            return(result);
        }
Ejemplo n.º 13
0
        public async Task Invoke(HttpContext context)
        {
            var aceeptHeaderEnricherContext = new AceeptHeaderEnricherContext(context, _options);

            foreach (var aceeptHeaderEnricher in _aceeptHeaderEnrichers.Where(a =>
                                                                              a.CanExecute(aceeptHeaderEnricherContext)))
            {
                aceeptHeaderEnricher.Execute(aceeptHeaderEnricherContext);
            }


            var acceptHeaders = new List <MediaTypeSegmentWithQuality>();

            AcceptHeaderParser.ParseAcceptHeader(context.Request.Headers[HeaderNames.Accept], acceptHeaders);
            context.Features.Set <IOutputFormatter>(OutputFormatterSelector.SelectFormatter(_options.Value.OutputFormatters.OfType <TextOutputFormatter>(), acceptHeaders));


            await _next(context);
        }
Ejemplo n.º 14
0
    public void ParseAcceptHeader_ValidMediaType_FollowedByWhitespace()
    {
        // Arrange
        var expected = new MediaTypeSegmentWithQuality[]
        {
            new MediaTypeSegmentWithQuality(new StringSegment("application/json"), 1.0),
        };

        var input = "*/*Content-Type application/json";

        // Act
        var parsed = AcceptHeaderParser.ParseAcceptHeader(new List <string>()
        {
            input
        });

        // Assert
        Assert.Equal(expected, parsed);
    }
        public void ParseAcceptHeader_ValidMediaType_FollowedByComma()
        {
            // Arrange
            var expected = new MediaTypeSegmentWithQuality[]
            {
                new MediaTypeSegmentWithQuality(new StringSegment("*/*Content-Type"), 1.0),
                new MediaTypeSegmentWithQuality(new StringSegment("application/json"), 1.0),
            };

            var input = "*/*Content-Type,application/json";

            // Act
            var parsed = AcceptHeaderParser.ParseAcceptHeader(new List <string>()
            {
                input
            });

            // Assert
            expected.Should().Equal(parsed);
        }
Ejemplo n.º 16
0
        public static List <MediaTypeSegmentWithQuality> GetAcceptableMediaTypes(this HttpRequest request)
        {
            var mvcOptions = request.HttpContext.RequestServices.GetRequiredService <IOptions <MvcOptions> >()?.Value;

            var result = new List <MediaTypeSegmentWithQuality>();

            //If the accept header contains '*/*' or 'text/html' ignore all accept headers
            AcceptHeaderParser.ParseAcceptHeader(request.Headers[HeaderNames.Accept], result);
            for (var i = 0; i < result.Count; i++)
            {
                var mediaType = new MediaType(result[i].MediaType);
                if ((!mvcOptions.RespectBrowserAcceptHeader && mediaType.MatchesAllSubTypes && mediaType.MatchesAllTypes) || result[i].MediaType == "text/html")
                {
                    result.Clear();
                    return(result);
                }
            }

            result.Sort(_sortFunction);

            return(result);
        }
Ejemplo n.º 17
0
    public void ParseAcceptHeader_ParsesSimpleHeaderWithMultipleValues()
    {
        // Arrange
        var header   = "application/json, application/xml;q=0.8";
        var expected = new List <MediaTypeSegmentWithQuality>
        {
            new MediaTypeSegmentWithQuality(new StringSegment("application/json"), 1.0),
            new MediaTypeSegmentWithQuality(new StringSegment("application/xml;q=0.8"), 0.8)
        };

        // Act
        var parsed = AcceptHeaderParser.ParseAcceptHeader(new List <string> {
            header
        });

        // Assert
        Assert.Equal(expected, parsed);
        foreach (var mediaType in parsed)
        {
            Assert.Same(header, mediaType.MediaType.Buffer);
        }
    }