public void Should_parse_rewrite_map()
    {
        // arrange
        const string expectedMapName = "apiMap";
        const string expectedKey     = "api.test.com";
        const string expectedValue   = "test.com/api";
        var          xml             = $@"<rewrite>
                                <rewriteMaps>
                                    <rewriteMap name=""{expectedMapName}"">
                                        <add key=""{expectedKey}"" value=""{expectedValue}"" />
                                    </rewriteMap>
                                </rewriteMaps>
                            </rewrite>";

        // act
        var xmlDoc     = XDocument.Load(new StringReader(xml), LoadOptions.SetLineInfo);
        var xmlRoot    = xmlDoc.Descendants(RewriteTags.Rewrite).FirstOrDefault();
        var actualMaps = RewriteMapParser.Parse(xmlRoot);

        // assert
        Assert.Equal(1, actualMaps.Count);

        var actualMap = actualMaps[expectedMapName];

        Assert.NotNull(actualMap);
        Assert.Equal(expectedMapName, actualMap.Name);
        Assert.Equal(expectedValue, actualMap[expectedKey]);
    }
Beispiel #2
0
    /// <summary>
    /// Parse an IIS rewrite section into a list of <see cref="IISUrlRewriteRule"/>s.
    /// </summary>
    /// <param name="reader">The reader containing the rewrite XML</param>
    /// <param name="alwaysUseManagedServerVariables">Determines whether server variables will be sourced from the managed server</param>
    public IList <IISUrlRewriteRule> Parse(TextReader reader, bool alwaysUseManagedServerVariables)
    {
        var xmlDoc  = XDocument.Load(reader, LoadOptions.SetLineInfo);
        var xmlRoot = xmlDoc.Descendants(RewriteTags.Rewrite).FirstOrDefault();

        if (xmlRoot == null)
        {
            throw new InvalidUrlRewriteFormatException(new XElement(RewriteTags.Rewrite), "The root element '<rewrite>' is missing");
        }

        _inputParser = new InputParser(RewriteMapParser.Parse(xmlRoot), alwaysUseManagedServerVariables);

        var result = new List <IISUrlRewriteRule>();

        ParseRules(xmlRoot.Descendants(RewriteTags.GlobalRules).FirstOrDefault(), result, global: true);
        ParseRules(xmlRoot.Descendants(RewriteTags.Rules).FirstOrDefault(), result, global: false);
        return(result);
    }