Exemplo n.º 1
0
        public IHTTPRequestHandler CreateRequestHandler(HTTPServerRequest request)
        {
            switch (_type)
            {
            case RequestHandlerType.DateTime: return(new DateTimeHandler(_writeLogDelegate));

            case RequestHandlerType.GUID: return(new GuidHandler(_writeLogDelegate));

            default: return(null);
            }
        }
 /// <summary>
 /// 返回请求句柄
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 public IHTTPRequestHandler CreateRequestHandler(HTTPServerRequest request)
 {
     //不是HttpGET或HttpPOST方式,直接返回
     if (request.Method == HTTPServerRequest.HTTP_GET || request.Method == HTTPServerRequest.HTTP_POST)
     {
         return(handler);
     }
     else
     {
         return(null);
     }
 }
Exemplo n.º 3
0
        /// <summary>
        /// 实现Request响应
        /// </summary>
        /// <param name="request"></param>
        /// <param name="response"></param>
        public void HandleRequest(HTTPServerRequest request, HTTPServerResponse response)
        {
            /**
             * In this example we'll write the body into the
             * stream obtained by response.Send(). This will cause the
             * KeepAlive to be false since the size of the body is not
             * known when the response header is sent.
             **/

            if (request.URI.ToLower() == "/favicon.ico")
            {
                response.ContentType     = "text/html;charset=utf-8";
                response.StatusAndReason = HTTPServerResponse.HTTPStatus.HTTP_NOT_FOUND;
                response.SendContinue();
            }
            else if (request.URI.ToLower() == "/api")
            {
                response.ContentType = "application/json;charset=utf-8";
                SendResponse(response, caller.GetAPIText());
            }
            else if (request.URI.ToLower() == "/help")
            {
                //发送文档帮助信息
                response.ContentType     = "text/html;charset=utf-8";
                response.StatusAndReason = HTTPServerResponse.HTTPStatus.HTTP_OK;
                SendResponse(response, caller.GetDocument(null));
            }
            else if (request.URI.ToLower().IndexOf("/help/") == 0)
            {
                //发送文档帮助信息
                response.ContentType     = "text/html;charset=utf-8";
                response.StatusAndReason = HTTPServerResponse.HTTPStatus.HTTP_OK;
                var name = request.URI.Substring(request.URI.IndexOf("/help/") + 6);
                SendResponse(response, caller.GetDocument(name));
            }
            else if (request.URI.Substring(request.URI.IndexOf('/') + 1).Length > 5)
            {
                HandleResponse(request, response);
            }
            else
            {
                response.StatusAndReason = HTTPServerResponse.HTTPStatus.HTTP_NOT_ACCEPTABLE;
                var error = new HttpServiceResult {
                    Message = response.Reason
                };
                SendResponse(response, error);
            }
        }
Exemplo n.º 4
0
        public void HandleRequest(HTTPServerRequest request, HTTPServerResponse response)
        {
            StreamReader reader = new StreamReader(request.GetRequestStream(), Encoding.UTF8);
            string       req    = reader.ReadToEnd();
            string       n      = request.Get("name");

            if (_writeLogDelegate != null)
            {
                _writeLogDelegate("Handling GUID request");
            }

            if (request.URI == "/")
            {
                /**
                 * In this example we'll write the body to a memorystream before
                 * we send the whole buffer to the response. This way the KeepAlive
                 * can stay true since the length of the body is known when the
                 * response header is sent.
                 **/
                using (MemoryStream ostr = new MemoryStream())
                {
                    using (TextWriter tw = new StreamWriter(ostr))
                    {
                        tw.WriteLine("<html>");
                        tw.WriteLine("<header><title>GUID Server</title></header>");
                        tw.WriteLine("<body>");
                        tw.WriteLine(Guid.NewGuid().ToString());
                        tw.WriteLine("</body>");
                        tw.WriteLine("</html>");
                    }

                    response.SendBuffer(ostr.ToArray(), "text/html");
                }
            }
            else
            {
                response.StatusAndReason = HTTPServerResponse.HTTPStatus.HTTP_NOT_FOUND;
                response.Send();
            }
        }
Exemplo n.º 5
0
        public void HandleRequest(HTTPServerRequest request, HTTPServerResponse response)
        {
            if (_writeLogDelegate != null)
            {
                _writeLogDelegate("Handling DateTime request");
            }

            if (request.URI == "/")
            {
                /**
                 * In this example we'll write the body into the
                 * stream obtained by response.Send(). This will cause the
                 * KeepAlive to be false since the size of the body is not
                 * known when the response header is sent.
                 **/
                response.ContentType = "text/html";
                using (Stream ostr = response.Send())
                    using (TextWriter tw = new StreamWriter(ostr))
                    {
                        tw.WriteLine("<html>");
                        tw.WriteLine("<head>");
                        tw.WriteLine("<title>Date Time Server</title>");
                        tw.WriteLine("<meta http-equiv=\"refresh\" content=\"2\">");
                        tw.WriteLine("</header>");
                        tw.WriteLine("<body>");
                        tw.WriteLine(DateTime.Now.ToString());
                        tw.WriteLine("</body>");
                        tw.WriteLine("</html>");
                    }
            }
            else
            {
                response.StatusAndReason = HTTPServerResponse.HTTPStatus.HTTP_NOT_FOUND;
                response.Send();
            }
        }
Exemplo n.º 6
0
        private void HandleResponse(HTTPServerRequest request, HTTPServerResponse response)
        {
            //响应格式
            response.ContentType = "application/json;charset=utf-8";

            var pathAndQuery = request.URI.TrimStart('/');
            var array        = pathAndQuery.Split('?');
            var methodName   = array[0];
            var paramString  = array.Length > 1 ? array[1] : null;
            var callMethod   = caller.GetCaller(methodName);

            if (callMethod == null)
            {
                response.StatusAndReason = HTTPServerResponse.HTTPStatus.HTTP_NOT_FOUND;
                var error = new HttpServiceResult {
                    Message = string.Format("{0}【{1}】", response.Reason, methodName)
                };
                SendResponse(response, error);
                return;
            }
            else if (callMethod.HttpMethod == HttpMethod.POST && request.Method.ToUpper() == "GET")
            {
                response.StatusAndReason = HTTPServerResponse.HTTPStatus.HTTP_METHOD_NOT_ALLOWED;
                var error = new HttpServiceResult {
                    Message = response.Reason
                };
                SendResponse(response, error);
                return;
            }

            try
            {
                //调用方法
                NameValueCollection nvs = null;
                if (callMethod.HttpMethod == HttpMethod.GET)
                {
                    nvs = HttpUtility.ParseQueryString(paramString ?? string.Empty, Encoding.UTF8);
                }
                else
                {
                    //接收流内部数据
                    var stream = request.GetRequestStream();

                    //接收流内部数据
                    var    sr          = new StreamReader(stream, Encoding.UTF8);
                    string streamValue = sr.ReadToEnd();

                    //转换成NameValueCollection
                    nvs = ConvertCollection(streamValue);
                }

                if (callMethod.Authorized)
                {
                    if (!request.Has("X-AuthParameter"))
                    {
                        throw new AuthorizeException("Request header did not exist [X-AuthParameter] info.");
                    }
                    else
                    {
                        //调用认证的信息
                        nvs[callMethod.AuthParameter] = request.Get("X-AuthParameter");
                    }
                }

                //转换成JsonString
                var    parameters = ConvertJsonString(nvs);
                string jsonString = caller.CallMethod(methodName, parameters);

                if (callMethod.TypeString)
                {
                    //如果返回是字符串类型,则设置为文本返回
                    response.ContentType = "text/plain;charset=utf-8";

                    //转换成string类型
                    jsonString = SerializationManager.DeserializeJson <string>(jsonString);
                }

                SendResponse(response, jsonString);
            }
            catch (HTTPMessageException ex)
            {
                response.StatusAndReason = HTTPServerResponse.HTTPStatus.HTTP_EXPECTATION_FAILED;
                var error = new HttpServiceResult {
                    Message = string.Format("{0} - {1}", response.Reason, ex.Message)
                };
                SendResponse(response, error);
            }
            catch (Exception ex)
            {
                response.StatusAndReason = HTTPServerResponse.HTTPStatus.HTTP_BAD_REQUEST;
                var e     = ErrorHelper.GetInnerException(ex);
                var error = new HttpServiceResult {
                    Message = string.Format("{0} - {1}", e.GetType().Name, e.Message)
                };
                SendResponse(response, error);
            }
        }