Ejemplo n.º 1
0
        public async Task <HttpRequest> ParseAsync(Stream stream)
        {
            var    streamReader = new StreamReader(stream);
            string startLine    = await streamReader.ReadLineAsync();

            HttpRequest request       = new HttpRequest();
            var         startLineRule = new Regex(@"^(GET|HEAD|POST|PUT|DELETE|TRACE|CONNECT|OPTIONS) (.+) HTTP/1.1$");

            if (startLineRule.IsMatch(startLine))
            {
                var match = startLineRule.Match(startLine);
                request.RequestMethod = match.Groups[1].Value.Trim();
                request.Uri           = UrlHelper.UrlDecode(match.Groups[2].Value.Trim(), Encoding.UTF8);
                request.QueryString   = UrlHelper.GetQueryString(request.Uri);
            }
            else
            {
                throw new HttpRequestParseException("http格式错误");
            }

            request.Header = await GetHttpHeaderAsync(streamReader);

            Encoding encoding = GetBodyEncoding(request.Header["Content-Type"] ?? string.Empty);

            RequestBodyDataParseCommand command =
                BodyParseCommandFactory.GetBodyParseCommand(request.Header["Content-Type"]);
            HttpRequestBody body = await command.ExecuteAsync(stream, encoding);

            request.Body = body;
            return(request);
        }
Ejemplo n.º 2
0
        public override async Task <HttpRequestBody> ExecuteAsync(Stream stream, Encoding e)
        {
            string          line;
            StringBuilder   formBodySb = new StringBuilder();
            HttpRequestBody body       = new HttpRequestBody();

            var reader = new StreamReader(stream, e);

            while (!string.IsNullOrEmpty(line = await reader.ReadLineAsync()))
            {
                formBodySb.Append(line);
            }

            var bodyString = formBodySb.ToString();

            bodyString = UrlHelper.UrlDecode(bodyString, e);
            var bodyProperties = bodyString.Split('&');

            foreach (var bodyProperty in bodyProperties)
            {
                var keyValuePair = bodyProperty.Split('=');
                if (keyValuePair.Length >= 2)
                {
                    body[keyValuePair[0]] = keyValuePair[1];
                }
            }

            return(body);
        }
        public override async Task <HttpRequestBody> ExecuteAsync(Stream stream, Encoding e)
        {
            var reader     = new StreamReader(stream);
            var bodyString = await reader.ReadToEndAsync();

            Dictionary <string, string> dict = JsonSerializer.DeserializeFromString <Dictionary <string, string> >(bodyString);
            HttpRequestBody             body = new HttpRequestBody();

            body.Properties = dict;
            return(body);
        }
Ejemplo n.º 4
0
        public override async Task <HttpRequestBody> ExecuteAsync(Stream stream, Encoding e)
        {
            MultiPartFormDataParser parser = new MultiPartFormDataParser(stream, e);
            await parser.ParseAsync();

            HttpRequestBody body = new HttpRequestBody();

            body.Properties = parser.Parameters;
            body.Files      = parser.Files;
            return(body);
        }
Ejemplo n.º 5
0
        protected virtual HttpRequest BuildRequest([CanBeNull] string token, [NotNull] string method,
                                                   [NotNull] string queryString, [CanBeNull] HttpRequestBody body)
        {
            var request = new HttpRequest(method, queryString, body, accept: httpSerializer.ResponseContentType);
            var sb      = new StringBuilder("DiadocAuth ");

            sb.AppendFormat("ddauth_api_client_id={0}", apiClientId);
            if (!string.IsNullOrEmpty(token))
            {
                sb.AppendFormat(",ddauth_token={0}", token);
            }
            request.AddHeader("Authorization", sb.ToString());
            return(request);
        }
Ejemplo n.º 6
0
        public static Task <HttpRequestBody <T> > GetBodyAsync <T>(this HttpRequest request) where T : class
        {
            T value;

            try
            {
                value = request.Body.ReadAs <T>();
            }
            catch (Exception ex)
            {
                return(Task.FromResult(HttpRequestBody <T> .CreateInvalid(ex.Message)));
            }

            if (value is null)
            {
                return(Task.FromResult(HttpRequestBody <T> .CreateInvalid("Request body can not be empty.")));
            }

            var validationResults = new List <ValidationResult>();

            bool isValid = Validator.TryValidateObject(value, new ValidationContext(value, null, null), validationResults, true);

            return(Task.FromResult(new HttpRequestBody <T>(isValid, value, validationResults)));
        }
Ejemplo n.º 7
0
        internal static async Task <HttpRequestBody <T> > GetBodyAsync <T>(this HttpRequest request)
        {
            var body    = new HttpRequestBody <T>();
            var content = await new StreamReader(request.Body).ReadToEndAsync();

            try
            {
                body.Request = JsonConvert.DeserializeObject <T>(content);

                var results = new List <ValidationResult>();
                body.IsValid           = Validator.TryValidateObject(body.Request, new ValidationContext(body.Request, null, null), results, true);
                body.ValidationResults = results;
            }
            catch (JsonReaderException ex)
            {
                body.IsValid           = false;
                body.ValidationResults = new List <ValidationResult>()
                {
                    new ValidationResult($"Error occurred during parsing the body. Exception Message : {ex.Message}")
                };
            }

            return(body);
        }
Ejemplo n.º 8
0
 public void SetRequestBody(HttpRequestBody requestBody)
 {
     this.requestBody = requestBody;
 }