private Response HandleGet(HttpListenerRequest req) { if (req.Url.Segments[1].Equals("Process/")) { Node cached; Request r = Request.GetRequest(req.Url.Segments[2], null, req.Url.Segments[3]); try { using (StreamReader sr = new StreamReader(@"" + path + "/" + r.Filename + ".json")) { cached = JsonConvert.DeserializeObject <Node>(sr.ReadToEnd()); } } catch { return(Response.GetErrorResponse()); } Output o = new Output(cached); JObject response = new JObject(); response.Add("view", o.CreateView(int.Parse(r.Data))); byte[] bytes = Encoding.UTF8.GetBytes(response.ToString()); return(Response.GetResponse(200, "application/json", bytes)); } else { return(Response.GetInvalidRequestResponse()); } }
/// <summary> /// 处理http静态页面的请求 /// </summary> /// <param name="rawUrl"></param> /// <param name="connSocket"></param> private void ProcessStaticPageRequest(string rawUrl, Socket connSocket) { //拼接屋里路径的字符串,检测当前物理路径的文件是否存在 //注意Path.Combine()方法中,第二个开始后的参数,开头的/要去掉,否则拼接出来的路径将从后面的 //以/的字符串开始进行拼接,也就是忽略掉,/前面的拼接路径字符串 rawUrl = rawUrl.TrimStart('/'); //完整路径 string physicalPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "web", rawUrl); //判断文件是否存在 if (File.Exists(physicalPath)) { using (FileStream fs = new FileStream(physicalPath, FileMode.Open)) { byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); //准备发送响应报文 string ext = Path.GetExtension(rawUrl); Response response = new Response(200, buffer, ext); //发送响应报文,关闭当前socket连接,注意这里体现了http协议的无状态的基本原因 connSocket.Send(response.GetResponse()); SetLogText(connSocket.RemoteEndPoint + ":已经关闭连接"); connSocket.Close(); } } else { //不存在 } }
private Response HandlePost(HttpListenerRequest req) { if (req.RawUrl.Equals("/Process")) { if (req.HasEntityBody) { Request r = null; try { r = GetData(req.InputStream); } catch { return(Response.GetInvalidRequestResponse()); } if (Validation.CheckDocument(r.Data, r.Type)) { string id = Guid.NewGuid().ToString(); Process pro = Process.GetProcess(r.Data, r.Type); Node n = pro.ProcessDocument(); Output o = new Output(n); //new output object try { SaveFile(id, n); JObject response = new JObject(); response.Add("filename", id); response.Add("grid", o.CreateGrid()); response.Add("view", o.CreateView(1)); byte[] bytes = Encoding.UTF8.GetBytes(response.ToString()); return(Response.GetResponse(200, "application/json", bytes)); } catch { return(Response.GetErrorResponse()); } } } return(Response.GetErrorResponse()); } else { return(Response.GetInvalidRequestResponse()); } }