Exemple #1
0
        /// <summary>
        /// Creates a new request object.
        /// </summary>
        /// <param name="fcgiRequest"></param>
        public HttpRequest(FastCGI.Request fcgiRequest)
        {
            FcgiRequest = fcgiRequest;
            string httpMethod = fcgiRequest.GetParameterASCII("REQUEST_METHOD");

            switch (httpMethod)
            {
            case "GET":
                Method = HttpMethod.GET;
                break;

            case "POST":
                Method = HttpMethod.POST;
                break;

            case "PUT":
                Method = HttpMethod.PUT;
                break;

            case "DELETE":
                Method = HttpMethod.DELETE;
                break;

            default:
                Method = HttpMethod.UNKNOWN;
                break;
            }

            GET = new Dictionary <string, string>();
            // Todo: perform correct parsing and decoding according to HTTP standard
            var getParams = Encoding.ASCII.GetString(ServerParameters["QUERY_STRING"]).Split('&');

            foreach (var param in getParams)
            {
                if (param.Length > 0)
                {
                    var keyValue = param.Split(new char[] { '=' }, 2);
                    if (keyValue.Length >= 1)
                    {
                        var key   = keyValue[0];
                        var value = "";
                        if (keyValue.Length >= 2)
                        {
                            value = keyValue[1];
                        }
                        GET[key] = System.Uri.UnescapeDataString(value.Replace('+', ' '));
                    }
                }
            }

            POST = new Dictionary <string, string>();
            // Todo: perform correct parsing and decoding according to HTTP standard
            var postParams = Body.Split('&');

            foreach (var param in postParams)
            {
                if (param.Length > 0)
                {
                    var keyValue = param.Split(new char[] { '=' }, 2);
                    if (keyValue.Length >= 1)
                    {
                        var key   = keyValue[0];
                        var value = "";
                        if (keyValue.Length >= 2)
                        {
                            value = keyValue[1];
                        }
                        POST[key] = System.Uri.UnescapeDataString(value.Replace('+', ' '));
                    }
                }
            }

            if (ServerParameters.ContainsKey("HTTP_COOKIE"))
            {
                var cookieHeader = GetParameterASCII("HTTP_COOKIE");
                var cookies      = cookieHeader.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                foreach (var cookie in cookies)
                {
                    var cookieNameValue = cookie.Split('=');
                    Cookies[cookieNameValue[0].Trim()] = System.Uri.UnescapeDataString(cookieNameValue[1].Trim().Replace('+', ' '));
                }
            }
        }