コード例 #1
0
        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();
        }