Skip to content

Commit a75a6dd

Browse files
committed
Add parameter to MultipartFormDataParser to indicate if you want invalid parts to be ignored (instead of throwing an exception)
1 parent 5e97899 commit a75a6dd

1 file changed

Lines changed: 30 additions & 12 deletions

File tree

Source/HttpMultipartParser/MultipartFormDataParser.cs

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -146,12 +146,15 @@ private MultipartFormDataParser()
146146
/// <param name="binaryMimeTypes">
147147
/// List of mimetypes that should be detected as file.
148148
/// </param>
149+
/// <param name="ignoreInvalidParts">
150+
/// By default the parser will throw an exception if it encounters an invalid part. Set this to true to ignore invalid parts.
151+
/// </param>
149152
/// <returns>
150153
/// A new instance of the <see cref="MultipartFormDataParser"/> class.
151154
/// </returns>
152-
public static MultipartFormDataParser Parse(Stream stream, Encoding encoding, int binaryBufferSize = DefaultBufferSize, string[] binaryMimeTypes = null)
155+
public static MultipartFormDataParser Parse(Stream stream, Encoding encoding, int binaryBufferSize = DefaultBufferSize, string[] binaryMimeTypes = null, bool ignoreInvalidParts = false)
153156
{
154-
return Parse(stream, null, encoding, binaryBufferSize, binaryMimeTypes);
157+
return Parse(stream, null, encoding, binaryBufferSize, binaryMimeTypes, ignoreInvalidParts);
155158
}
156159

157160
/// <summary>
@@ -175,13 +178,16 @@ public static MultipartFormDataParser Parse(Stream stream, Encoding encoding, in
175178
/// <param name="binaryMimeTypes">
176179
/// List of mimetypes that should be detected as file.
177180
/// </param>
181+
/// <param name="ignoreInvalidParts">
182+
/// By default the parser will throw an exception if it encounters an invalid part. Set this to true to ignore invalid parts.
183+
/// </param>
178184
/// <returns>
179185
/// A new instance of the <see cref="MultipartFormDataParser"/> class.
180186
/// </returns>
181-
public static MultipartFormDataParser Parse(Stream stream, string boundary = null, Encoding encoding = null, int binaryBufferSize = DefaultBufferSize, string[] binaryMimeTypes = null)
187+
public static MultipartFormDataParser Parse(Stream stream, string boundary = null, Encoding encoding = null, int binaryBufferSize = DefaultBufferSize, string[] binaryMimeTypes = null, bool ignoreInvalidParts = false)
182188
{
183189
var parser = new MultipartFormDataParser();
184-
parser.ParseStream(stream, boundary, encoding, binaryBufferSize, binaryMimeTypes);
190+
parser.ParseStream(stream, boundary, encoding, binaryBufferSize, binaryMimeTypes, ignoreInvalidParts);
185191
return parser;
186192
}
187193

@@ -202,12 +208,15 @@ public static MultipartFormDataParser Parse(Stream stream, string boundary = nul
202208
/// <param name="binaryMimeTypes">
203209
/// List of mimetypes that should be detected as file.
204210
/// </param>
211+
/// <param name="ignoreInvalidParts">
212+
/// By default the parser will throw an exception if it encounters an invalid part. Set this to true to ignore invalid parts.
213+
/// </param>
205214
/// <returns>
206215
/// A new instance of the <see cref="MultipartFormDataParser"/> class.
207216
/// </returns>
208-
public static Task<MultipartFormDataParser> ParseAsync(Stream stream, Encoding encoding, int binaryBufferSize = DefaultBufferSize, string[] binaryMimeTypes = null)
217+
public static Task<MultipartFormDataParser> ParseAsync(Stream stream, Encoding encoding, int binaryBufferSize = DefaultBufferSize, string[] binaryMimeTypes = null, bool ignoreInvalidParts = false)
209218
{
210-
return ParseAsync(stream, null, encoding);
219+
return ParseAsync(stream, null, encoding, DefaultBufferSize, null, ignoreInvalidParts);
211220
}
212221

213222
/// <summary>
@@ -231,13 +240,16 @@ public static Task<MultipartFormDataParser> ParseAsync(Stream stream, Encoding e
231240
/// <param name="binaryMimeTypes">
232241
/// List of mimetypes that should be detected as file.
233242
/// </param>
243+
/// <param name="ignoreInvalidParts">
244+
/// By default the parser will throw an exception if it encounters an invalid part. Set this to true to ignore invalid parts.
245+
/// </param>
234246
/// <returns>
235247
/// A new instance of the <see cref="MultipartFormDataParser"/> class.
236248
/// </returns>
237-
public static async Task<MultipartFormDataParser> ParseAsync(Stream stream, string boundary = null, Encoding encoding = null, int binaryBufferSize = DefaultBufferSize, string[] binaryMimeTypes = null)
249+
public static async Task<MultipartFormDataParser> ParseAsync(Stream stream, string boundary = null, Encoding encoding = null, int binaryBufferSize = DefaultBufferSize, string[] binaryMimeTypes = null, bool ignoreInvalidParts = false)
238250
{
239251
var parser = new MultipartFormDataParser();
240-
await parser.ParseStreamAsync(stream, boundary, encoding, binaryBufferSize, binaryMimeTypes).ConfigureAwait(false);
252+
await parser.ParseStreamAsync(stream, boundary, encoding, binaryBufferSize, binaryMimeTypes, ignoreInvalidParts).ConfigureAwait(false);
241253
return parser;
242254
}
243255

@@ -265,9 +277,12 @@ public static async Task<MultipartFormDataParser> ParseAsync(Stream stream, stri
265277
/// <param name="binaryMimeTypes">
266278
/// List of mimetypes that should be detected as file.
267279
/// </param>
268-
private void ParseStream(Stream stream, string boundary, Encoding encoding, int binaryBufferSize, string[] binaryMimeTypes)
280+
/// <param name="ignoreInvalidParts">
281+
/// By default the parser will throw an exception if it encounters an invalid part. Set this to true to ignore invalid parts.
282+
/// </param>
283+
private void ParseStream(Stream stream, string boundary, Encoding encoding, int binaryBufferSize, string[] binaryMimeTypes, bool ignoreInvalidParts)
269284
{
270-
var streamingParser = new StreamingMultipartFormDataParser(stream, boundary, encoding ?? Encoding.UTF8, binaryBufferSize, binaryMimeTypes);
285+
var streamingParser = new StreamingMultipartFormDataParser(stream, boundary, encoding ?? Encoding.UTF8, binaryBufferSize, binaryMimeTypes, ignoreInvalidParts);
271286
streamingParser.ParameterHandler += parameterPart => _parameters.Add(parameterPart);
272287

273288
streamingParser.FileHandler += (name, fileName, type, disposition, buffer, bytes, partNumber, additionalProperties) =>
@@ -310,9 +325,12 @@ private void ParseStream(Stream stream, string boundary, Encoding encoding, int
310325
/// <param name="binaryMimeTypes">
311326
/// List of mimetypes that should be detected as file.
312327
/// </param>
313-
private async Task ParseStreamAsync(Stream stream, string boundary, Encoding encoding, int binaryBufferSize, string[] binaryMimeTypes)
328+
/// <param name="ignoreInvalidParts">
329+
/// By default the parser will throw an exception if it encounters an invalid part. Set this to true to ignore invalid parts.
330+
/// </param>
331+
private async Task ParseStreamAsync(Stream stream, string boundary, Encoding encoding, int binaryBufferSize, string[] binaryMimeTypes, bool ignoreInvalidParts)
314332
{
315-
var streamingParser = new StreamingMultipartFormDataParser(stream, boundary, encoding ?? Encoding.UTF8, binaryBufferSize, binaryMimeTypes);
333+
var streamingParser = new StreamingMultipartFormDataParser(stream, boundary, encoding ?? Encoding.UTF8, binaryBufferSize, binaryMimeTypes, ignoreInvalidParts);
316334
streamingParser.ParameterHandler += parameterPart => _parameters.Add(parameterPart);
317335

318336
streamingParser.FileHandler += (name, fileName, type, disposition, buffer, bytes, partNumber, additionalProperties) =>

0 commit comments

Comments
 (0)