private static void CleanUp() { InnerRequestProcessors.Clear(); InnerStaticRedirectionTable.Clear(); _listener = null; _fileRequestController.Dispose(); _statisticsController.Dispose(); ServiceUris.Clear(); }
public static bool AddRequestProcessor(RequestProcessor <TAccount> requestProcessor) { if (CheckRequestProcessor(requestProcessor) != true) { return(false); } requestProcessor.SubUri = requestProcessor.SubUri.Trim('/'); var duplicate = InnerRequestProcessors.FirstOrDefault(rp => RequestProcessorDuplicates(rp, requestProcessor)); if (duplicate != null) { InnerRequestProcessors.Remove(duplicate); } InnerRequestProcessors.Add(requestProcessor); return(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 }); }