private static void CleanUp() { InnerRequestProcessors.Clear(); InnerStaticRedirectionTable.Clear(); _listener = null; _fileRequestController.Dispose(); _statisticsController.Dispose(); ServiceUris.Clear(); }
public static bool AddStaticRedirect(string fromUri, string toUri) { var preprocessed = PreprocessRedirect(fromUri, toUri); if (!preprocessed.Item3) { return(false); } return(InnerStaticRedirectionTable.TryAdd(preprocessed.Item1, preprocessed.Item2)); }
private static Tuple <string, string, bool> PreprocessRedirect(string fromUri, string toUri) { if (fromUri == null || toUri == null) { return(new Tuple <string, string, bool>(null, null, false)); } if (InnerStaticRedirectionTable.ContainsKey(fromUri)) { return(new Tuple <string, string, bool>(null, null, false)); } return(new Tuple <string, string, bool>(fromUri.Trim('/'), toUri.Trim('/'), true)); }
private static RequestProcessorSelectionResult <TAccount> SelectRequestProcessor(HttpListenerRequest request) { var requestMethod = CommonHelper.HttpMethodToEnum(request.HttpMethod); var localUri = request.Url.LocalPath.Trim('/'); if (requestMethod == HttpMethod.Get || requestMethod == HttpMethod.Head) { if (InnerStaticRedirectionTable.TryGetValue(localUri, out string redirectionTarget)) { var correspondedProcessor = InnerRequestProcessors.FirstOrDefault( rp => rp.Method == HttpMethod.Get && rp.SubUri.Trim('/') == redirectionTarget); if (correspondedProcessor != null) { return(new RequestProcessorSelectionResult <TAccount> { RequestProcessor = correspondedProcessor, MethodMatches = true, IsRedirect = true }); } } } var processorsForUri = InnerRequestProcessors.Where(requestProcessor => CommonHelper.UriMatchesString(request.Url, requestProcessor.SubUri)).ToList(); if (processorsForUri.Count == 0) { return(null); } var suitableProcessor = processorsForUri.FirstOrDefault(rp => rp.Method == requestMethod || requestMethod == HttpMethod.Head && rp.Method == HttpMethod.Get); //-V3130 return(new RequestProcessorSelectionResult <TAccount> { RequestProcessor = suitableProcessor, MethodMatches = suitableProcessor != null, IsRedirect = false }); }