コード例 #1
0
        public void RuleParse_ParseTypicalRule()
        {
            // arrange
            var xml = @"<rewrite>
                            <rules>
                                <rule name=""Rewrite to article.aspx"">
                                    <match url = ""^article/([0-9]+)/([_0-9a-z-]+)"" />
                                    <action type=""Rewrite"" url =""article.aspx?id={R:1}&amp;title={R:2}"" />
                                </rule>
                            </rules>
                        </rewrite>";

            var expected = new List <IISUrlRewriteRule>();

            expected.Add(CreateTestRule(new ConditionCollection(),
                                        url: "^article/([0-9]+)/([_0-9a-z-]+)",
                                        name: "Rewrite to article.aspx",
                                        actionType: ActionType.Rewrite,
                                        pattern: "article.aspx?id={R:1}&amp;title={R:2}"));

            // act
            var res = new UrlRewriteFileParser().Parse(new StringReader(xml), false);

            // assert
            AssertUrlRewriteRuleEquality(expected, res);
        }
コード例 #2
0
        public void Should_parse_global_rules()
        {
            // arrange
            var xml = @"<rewrite>
                            <globalRules>
                                <rule name=""httpsOnly"" patternSyntax=""ECMAScript"" stopProcessing=""true"">
                                    <match url="".*"" />
                                    <conditions logicalGrouping=""MatchAll"" trackAllCaptures=""false"">
                                        <add input=""{HTTPS}"" pattern=""off"" />
                                    </conditions>
                                    <action type=""Redirect"" url=""https://{HTTP_HOST}{REQUEST_URI}"" />
                                </rule>
                            </globalRules>
                            <rules>
                                <rule name=""Rewrite to article.aspx"">
                                    <match url = ""^article/([0-9]+)/([_0-9a-z-]+)"" />
                                    <action type=""Rewrite"" url =""article.aspx?id={R:1}&amp;title={R:2}"" />
                                </rule>
                            </rules>
                        </rewrite>";

            // act
            var rules = new UrlRewriteFileParser().Parse(new StringReader(xml), false);

            // assert
            Assert.Equal(2, rules.Count);
            Assert.True(rules[0].Global);
            Assert.False(rules[1].Global);
        }
コード例 #3
0
    public void RuleParse_ParseSingleRuleWithSingleCondition()
    {
        // arrange
        var xml = @"<rewrite>
                            <rules>
                                <rule name=""Rewrite to article.aspx"">
                                    <match url = ""^article/([0-9]+)/([_0-9a-z-]+)"" />
                                    <conditions>
                                        <add input=""{HTTPS}"" pattern=""^OFF$"" />
                                    </conditions>
                                    <action type=""Rewrite"" url =""article.aspx?id={R:1}&amp;title={R:2}"" />
                                </rule>
                            </rules>
                        </rewrite>";

        var condList = new ConditionCollection();

        condList.Add(new Condition(new InputParser().ParseInputString("{HTTPS}"), new RegexMatch(new Regex("^OFF$"), false)));

        var expected = new List <IISUrlRewriteRule>();

        expected.Add(CreateTestRule(condList,
                                    url: "^article/([0-9]+)/([_0-9a-z-]+)",
                                    name: "Rewrite to article.aspx",
                                    actionType: ActionType.Rewrite,
                                    pattern: "article.aspx?id={R:1}&amp;title={R:2}"));

        // act
        var res = new UrlRewriteFileParser().Parse(new StringReader(xml), false);

        // assert
        AssertUrlRewriteRuleEquality(expected, res);
    }
コード例 #4
0
        public void Should_skip_empty_conditions()
        {
            // arrange
            var xml = @"<rewrite>
                            <rules>
                                <rule name=""redirect-aspnet-mvc"" enabled=""true"" stopProcessing=""true"">
                                    <match url=""^aspnet/Mvc"" />
                                    <conditions logicalGrouping=""MatchAll"" trackAllCaptures=""false"" />
                                    <action type=""Redirect"" url=""https://github.com/aspnet/AspNetCore"" />
                                </rule>
                            </rules>
                        </rewrite>";

            // act
            var rules = new UrlRewriteFileParser().Parse(new StringReader(xml), false);

            // assert
            Assert.Null(rules[0].Conditions);
        }
コード例 #5
0
    public void ApplyRule_AssertNoTerminateFlagWillNotTerminateOnNoAction()
    {
        var xml   = new StringReader(@"<rewrite>
                <rules>
                <rule name=""Test"">
                <match url = ""(.*)"" ignoreCase=""false"" />
                <action type = ""None""/>
                </rule>
                </rules>
                </rewrite>");
        var rules = new UrlRewriteFileParser().Parse(xml, false);

        Assert.Equal(1, rules.Count);
        var context = new RewriteContext {
            HttpContext = new DefaultHttpContext()
        };

        rules.FirstOrDefault().ApplyRule(context);
        Assert.Equal(RuleResult.ContinueRules, context.Result);
    }
コード例 #6
0
    public void ApplyRule_AssertStopProcessingFlagWillTerminateOnNoAction()
    {
        var xml   = new StringReader(@"<rewrite>
                <rules>
                <rule name=""Test"" stopProcessing=""true"">
                <match url = ""(.*)""/>
                <action type = ""None""/>
                </rule>
                </rules>
                </rewrite>");
        var rules = new UrlRewriteFileParser().Parse(xml, false);

        Assert.Equal(1, rules.Count);
        var context = new RewriteContext {
            HttpContext = new DefaultHttpContext()
        };

        rules.FirstOrDefault().ApplyRule(context);
        Assert.Equal(RuleResult.SkipRemainingRules, context.Result);
    }
コード例 #7
0
    public static RewriteOptions AddIISUrlRewrite(this RewriteOptions options, TextReader reader, bool alwaysUseManagedServerVariables = false)
    {
        if (options == null)
        {
            throw new ArgumentNullException(nameof(options));
        }

        if (reader == null)
        {
            throw new ArgumentNullException(nameof(reader));
        }

        var rules = new UrlRewriteFileParser().Parse(reader, alwaysUseManagedServerVariables);

        foreach (var rule in rules)
        {
            options.Rules.Add(rule);
        }

        return(options);
    }
コード例 #8
0
        /// <summary>
        /// Add rules from a IIS config file containing Url Rewrite rules
        /// </summary>
        /// <param name="options">The <see cref="RewriteOptions"/></param>
        /// <param name="reader">The text reader stream.</param>
        public static RewriteOptions AddIISUrlRewrite(this RewriteOptions options, TextReader reader)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            if (reader == null)
            {
                throw new ArgumentException(nameof(reader));
            }

            var rules = new UrlRewriteFileParser().Parse(reader);

            foreach (var rule in rules)
            {
                options.Rules.Add(rule);
            }

            return(options);
        }
コード例 #9
0
    public void ApplyRule_TrackAllCaptures()
    {
        var xml   = new StringReader(@"<rewrite>
                <rules>
                <rule name=""Test"">
                <match url = ""(.*)"" ignoreCase=""false"" />
                <conditions trackAllCaptures = ""true"" >
                <add input = ""{REQUEST_URI}"" pattern = ""^/([a-zA-Z]+)/([0-9]+)/$"" />
                </conditions >
                <action type = ""None""/>
                </rule>
                </rules>
                </rewrite>");
        var rules = new UrlRewriteFileParser().Parse(xml, false);

        Assert.Equal(1, rules.Count);
        Assert.True(rules[0].Conditions.TrackAllCaptures);
        var context = new RewriteContext {
            HttpContext = new DefaultHttpContext()
        };

        rules.FirstOrDefault().ApplyRule(context);
        Assert.Equal(RuleResult.ContinueRules, context.Result);
    }