public void Should_limit_the_number_of_boundaries() { // Given var stream = BuildInputStream(null, StaticConfiguration.RequestQueryFormMultipartLimit + 10); var multipart = new HttpMultipart(stream, Boundary); // When var boundaries = multipart.GetBoundaries(); // Then boundaries.Count().ShouldEqual(StaticConfiguration.RequestQueryFormMultipartLimit); }
public void Should_locate_boundary_when_it_is_not_at_the_beginning_of_stream() { // Given var stream = BuildInputStream("some padding in the stream", 1); var multipart = new HttpMultipart(stream, Boundary); // When var boundaries = multipart.GetBoundaries(); // Then boundaries.Count().ShouldEqual(1); }
public void Should_locate_all_boundaries() { // Given var stream = BuildInputStream(null, 10); var multipart = new HttpMultipart(stream, Boundary); // When var boundaries = multipart.GetBoundaries(); // Then boundaries.Count().ShouldEqual(10); }
private void ParseFormData() { if (string.IsNullOrEmpty(this.Headers.ContentType)) { return; } var contentType = this.Headers["content-type"].First(); var mimeType = contentType.Split(';').First(); if (mimeType.Equals("application/x-www-form-urlencoded", StringComparison.OrdinalIgnoreCase)) { var reader = new StreamReader(this.Body); this.form = reader.ReadToEnd().AsQueryDictionary(); this.Body.Position = 0; } if (!mimeType.Equals("multipart/form-data", StringComparison.OrdinalIgnoreCase)) { return; } var boundary = Regex.Match(contentType, @"boundary=""?(?<token>[^\n\;\"" ]*)").Groups["token"].Value; var multipart = new HttpMultipart(this.Body, boundary); var formValues = new NameValueCollection(StaticConfiguration.CaseSensitive ? StringComparer.InvariantCulture : StringComparer.InvariantCultureIgnoreCase); foreach (var httpMultipartBoundary in multipart.GetBoundaries()) { if (string.IsNullOrEmpty(httpMultipartBoundary.Filename)) { var reader = new StreamReader(httpMultipartBoundary.Value); formValues.Add(httpMultipartBoundary.Name, reader.ReadToEnd()); } else { this.files.Add(new HttpFile(httpMultipartBoundary)); } } foreach (var key in formValues.AllKeys.Where(key => key != null)) { this.form[key] = formValues[key]; } this.Body.Position = 0; }
private void ParseFormData() { if (string.IsNullOrEmpty(this.Headers.ContentType)) { return; } var contentType = this.Headers["content-type"].First(); var mimeType = contentType.Split(';').First(); if (mimeType.Equals("application/x-www-form-urlencoded", StringComparison.OrdinalIgnoreCase)) { var reader = new StreamReader(this.Body); this.form = reader.ReadToEnd().AsQueryDictionary(); this.Body.Position = 0; } if (!mimeType.Equals("multipart/form-data", StringComparison.OrdinalIgnoreCase)) { return; } var boundary = Regex.Match(contentType, @"boundary=(?<token>[^\n\; ]*)").Groups["token"].Value; var multipart = new HttpMultipart(this.Body, boundary); foreach (var httpMultipartBoundary in multipart.GetBoundaries()) { if (string.IsNullOrEmpty(httpMultipartBoundary.Filename)) { var reader = new StreamReader(httpMultipartBoundary.Value); this.form[httpMultipartBoundary.Name] = reader.ReadToEnd(); } else { this.files.Add(new HttpFile( httpMultipartBoundary.ContentType, httpMultipartBoundary.Filename, httpMultipartBoundary.Value, httpMultipartBoundary.Name //include the form field that posted this file )); } } this.Body.Position = 0; }