/// <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('+', ' ')); } } }