コード例 #1
0
 private static void CleanUp()
 {
     InnerRequestProcessors.Clear();
     InnerStaticRedirectionTable.Clear();
     _listener = null;
     _fileRequestController.Dispose();
     _statisticsController.Dispose();
     ServiceUris.Clear();
 }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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
            });
        }