public void Start() { var settings = XmlHelper.Deserialize<Settings>("settings.xml"); var patterns = settings.Patterns?.ToDictionary(p => p.Name); foreach (var redirectRule in settings.Redirects) { Dictionary<Regex, string> queryRules = null; Dictionary<string, Dictionary<Regex, string>> contentRules = null; if (patterns != null) { queryRules = redirectRule.Patterns?.Split(',').ToDictionary( patternName => new Regex(patterns[patternName].Regex, RegexOptions.IgnoreCase), patternName => patterns[patternName].Replacement); contentRules = redirectRule.Replaces?.ToDictionary( rule => rule.MediaType, rule => rule.Patterns.Split(',').ToDictionary( patternName => new Regex(patterns[patternName].Regex, RegexOptions.IgnoreCase), patternName => patterns[patternName].Replacement)); } var redirectSettings = new RedirectSettings { Urls = redirectRule.From.Split(','), UrlProcessor = new UrlProcessor(new Uri(redirectRule.To), queryRules), ResponseContentProcessor = new ContentProcessor(contentRules) }; _redirects.Add(new HttpRedirect(redirectSettings)); } foreach (var httpRedirect in _redirects) { httpRedirect.Start(); } }
public HttpRedirect(RedirectSettings settings) { _urlProcessor = settings.UrlProcessor; _cookieProcessor = settings.CookieProcessor ?? new CookieProcessor(); _responseContentProcessor = settings.ResponseContentProcessor; _listener = new HttpListener(); foreach (var url in settings.Urls) { _listener.Prefixes.Add(url); } }