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); }
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); }
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); }
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); }
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))); }
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); }
public void SetRequestBody(HttpRequestBody requestBody) { this.requestBody = requestBody; }