public void Handle() { try { if (_context.Request.Headers.ContainsKey("Connection") == false) { _context.Response.Headers["Connection"] = "Keep-Alive"; } else { _context.Response.Headers["Connection"] = _context.Request.Headers["Connection"]; } //访问ts脚本 if (_context.Request.Headers["GET"].ToSafeString().EndsWith("/WayScriptRemoting", StringComparison.CurrentCultureIgnoreCase)) { outputFile(null, HttpServer.ScriptFilePath); } else if (_context.Request.Headers["POST"].ToSafeString().StartsWith("/wayscriptremoting_invoke?a=", StringComparison.CurrentCultureIgnoreCase)) { _context.Request.urlRequestHandler(); string json = _context.Request.Form["m"]; RemotingClientHandler rs = new ScriptRemoting.RemotingClientHandler((string data) => { _context.Response.WriteStringBody(data); }, null, _context.Request.RemoteEndPoint.ToString().Split(':')[0], (string)_context.Request.Headers["Referer"], (key) => { return(_context.Request.Headers[key]); }); rs.OnReceived(json); } else if (_context.Request.Headers["POST"].ToSafeString().StartsWith("/wayscriptremoting_recreatersa?a=", StringComparison.CurrentCultureIgnoreCase)) { _context.Request.urlRequestHandler(); string json = _context.Request.Form["m"]; RemotingClientHandler rs = new ScriptRemoting.RemotingClientHandler((string data) => { _context.Response.WriteStringBody(data); }, null, _context.Request.RemoteEndPoint.ToString().Split(':')[0], (string)_context.Request.Headers["Referer"], (key) => { return(_context.Request.Headers[key]); }); rs.handleReCreateRSA(json.FromJson <MessageBag>()); } else if (_context.Request.Headers["POST"].ToSafeString().EndsWith("?WayVirtualWebSocket=1", StringComparison.CurrentCultureIgnoreCase) || _context.Request.Headers["POST"].ToSafeString().EndsWith("&WayVirtualWebSocket=1", StringComparison.CurrentCultureIgnoreCase)) { _context.Request.urlRequestHandler(); new VirtualWebSocketHandler(_context.Request.Form, (data) => { _context.Response.WriteStringBody(data); }, () => { _context.Response.End(); return(0); }, () => { _context.Response.CloseSocket(); return(0); }, _context.Request.RemoteEndPoint.ToString().Split(':')[0], (string)_context.Request.Headers["Referer"], (key) => { return(_context.Request.Headers[key]); } ).Handle(); return; } else { string url = (_context.Request.Headers["GET"] == null ? _context.Request.Headers["POST"] : _context.Request.Headers["GET"]).ToSafeString(); if (url.Contains("?")) { MatchCollection matches = Regex.Matches(url, @"(?<n>(\w)+)\=(?<v>([^\=\&])+)"); foreach (Match m in matches) { _context.Request.Query[m.Groups["n"].Value] = WebUtility.UrlDecode(m.Groups["v"].Value); } url = url.Substring(0, url.IndexOf("?")); } string ext = Path.GetExtension(url).ToLower(); if (NotAllowDownloadFiles.Contains(ext)) { //不能访问dll exe等文件 throw new Exception("not allow"); } try { _context.Request.urlRequestHandler(); } catch (Exception ex) { } if ((_context.Server.Routers.Count > 0 || _context.Server.Handlers.Count > 0) && _currentHttpConnectInformation == null) { _currentHttpConnectInformation = new HttpConnectInformation(_context.Request, _context.Response); //先设一个默认controller,后面具体controller可以替换 _context.Controller = new RemotingController() { Session = _currentHttpConnectInformation.Session }; } url = getUrl(url); checkHandlers(url); if (_context.Response.mClient == null) { throw new Exception("ended"); } var controllerConfig = ControllerUrlConfig.FirstOrDefault(m => url.StartsWith(m.Key, StringComparison.CurrentCultureIgnoreCase) && url.Substring(m.Key.Length).Contains("/") == false); if (controllerConfig.Value != null) { RemotingClientHandler rs = new ScriptRemoting.RemotingClientHandler(null, null, _context.Request.RemoteEndPoint.ToString().Split(':')[0], null, null); rs.handleUrlMethod(controllerConfig.Value, url.Substring(controllerConfig.Key.Length)); } else { if (url.Length == 0 || url == "/") { url = _context.Server.WebPathManger.GetFileUrl("/index.html"); } if (Path.GetExtension(url).IsNullOrEmpty())//访问的路径如果没有扩展名,默认指向.html文件 { url = _context.Server.WebPathManger.GetFileUrl($"{url}.html"); } else { url = _context.Server.WebPathManger.GetFileUrl(url); } if (_context.Response.mClient != null) { string filepath = url; if (filepath.StartsWith("/")) { filepath = filepath.Substring(1); } filepath = Path.GetFullPath(_context.Server.Root + filepath); if (filepath.ToLower().Contains(_context.Server.Root.ToLower()) == false) { //访问了Root范围外文件 _context.Response.SendFileNotFound(); } else { outputFile(url, filepath); } } } } } catch (Exception ex) { } _context.Request.Dispose(); _context.Response.End(); }