private void HandleRequest(HttpListenerContext context) { HttpListenerRequest Request = context.Request; HttpListenerResponse Response = context.Response; try { string RequestedResource = Request.Url.AbsolutePath; ISimpleWebServerContentRetriever ContentRetriever = (from Retriever in this.contentRetriever where Retriever.CanHandleResource(RequestedResource) select Retriever ).FirstOrDefault(); if (ContentRetriever != null) { switch (Request.HttpMethod) { case "GET": { byte[] ResponseData = ContentRetriever.GetContent(RequestedResource); if (ResponseData != null) { Response.ContentLength64 = ResponseData.Length; Response.OutputStream.Write(ResponseData, 0, ResponseData.Length); } else { Response.StatusCode = (int)HttpStatusCode.NotFound; } break; } case "POST": { byte[] RequestData = new byte[Request.ContentLength64]; Request.InputStream.Read(RequestData, 0, RequestData.Length); byte[] ResponseData = ContentRetriever.PostContent(RequestedResource, RequestData); if (ResponseData != null) { Response.ContentLength64 = ResponseData.Length; Response.OutputStream.Write(ResponseData, 0, ResponseData.Length); } else { Response.StatusCode = (int)HttpStatusCode.NotFound; } break; } default: Response.StatusCode = (int)HttpStatusCode.MethodNotAllowed; break; } } else { Response.StatusCode = (int)HttpStatusCode.NotFound; } } catch (Exception) { Response.StatusCode = (int)HttpStatusCode.BadRequest; } Response.OutputStream.Close(); }