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]); }
/// <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); }