@@ -81,9 +81,9 @@ namespace HttpMultipartParser
8181 /// }
8282 /// </code>
8383 /// </example>
84- public class MultipartFormDataParser
84+ public class MultipartFormDataParser : IMultipartFormDataParser
8585 {
86- #region Constants
86+ #region Constants and fields
8787
8888 /// <summary>
8989 /// The default buffer size.
@@ -95,6 +95,9 @@ public class MultipartFormDataParser
9595 /// </remarks>
9696 private const int DefaultBufferSize = 4096 ;
9797
98+ private readonly List < FilePart > _files ;
99+ private readonly List < ParameterPart > _parameters ;
100+
98101 #endregion
99102
100103 #region Constructors and Destructors
@@ -104,6 +107,8 @@ public class MultipartFormDataParser
104107 /// </summary>
105108 private MultipartFormDataParser ( )
106109 {
110+ _files = new List < FilePart > ( ) ;
111+ _parameters = new List < ParameterPart > ( ) ;
107112 }
108113
109114 #endregion
@@ -114,12 +119,12 @@ private MultipartFormDataParser()
114119 /// Gets the mapping of parameters parsed files. The name of a given field
115120 /// maps to the parsed file data.
116121 /// </summary>
117- public List < FilePart > Files { get ; private set ; }
122+ public IReadOnlyList < FilePart > Files => _files . AsReadOnly ( ) ;
118123
119124 /// <summary>
120125 /// Gets the parameters. Several ParameterParts may share the same name.
121126 /// </summary>
122- public List < ParameterPart > Parameters { get ; private set ; }
127+ public IReadOnlyList < ParameterPart > Parameters => _parameters . AsReadOnly ( ) ;
123128
124129 #endregion
125130
@@ -304,18 +309,15 @@ public IEnumerable<string> GetParameterValues(string name)
304309 /// </param>
305310 private void ParseStream ( Stream stream , string boundary , Encoding encoding , int binaryBufferSize , string [ ] binaryMimeTypes )
306311 {
307- Files = new List < FilePart > ( ) ;
308- Parameters = new List < ParameterPart > ( ) ;
309-
310312 var streamingParser = new StreamingMultipartFormDataParser ( stream , boundary , encoding ?? Encoding . UTF8 , binaryBufferSize , binaryMimeTypes ) ;
311- streamingParser . ParameterHandler += parameterPart => Parameters . Add ( parameterPart ) ;
313+ streamingParser . ParameterHandler += parameterPart => _parameters . Add ( parameterPart ) ;
312314
313315 streamingParser . FileHandler += ( name , fileName , type , disposition , buffer , bytes , partNumber , additionalProperties ) =>
314316 {
315317 if ( partNumber == 0 )
316318 {
317319 // create file with first partNo
318- Files . Add ( new FilePart ( name , fileName , Utilities . MemoryStreamManager . GetStream ( $ "{ typeof ( MultipartFormDataParser ) . FullName } .{ nameof ( ParseStream ) } ") , additionalProperties , type , disposition ) ) ;
320+ _files . Add ( new FilePart ( name , fileName , Utilities . MemoryStreamManager . GetStream ( $ "{ typeof ( MultipartFormDataParser ) . FullName } .{ nameof ( ParseStream ) } ") , additionalProperties , type , disposition ) ) ;
319321 }
320322
321323 Files [ Files . Count - 1 ] . Data . Write ( buffer , 0 , bytes ) ;
@@ -352,18 +354,15 @@ private void ParseStream(Stream stream, string boundary, Encoding encoding, int
352354 /// </param>
353355 private async Task ParseStreamAsync ( Stream stream , string boundary , Encoding encoding , int binaryBufferSize , string [ ] binaryMimeTypes )
354356 {
355- Files = new List < FilePart > ( ) ;
356- Parameters = new List < ParameterPart > ( ) ;
357-
358357 var streamingParser = new StreamingMultipartFormDataParser ( stream , boundary , encoding ?? Encoding . UTF8 , binaryBufferSize , binaryMimeTypes ) ;
359- streamingParser . ParameterHandler += parameterPart => Parameters . Add ( parameterPart ) ;
358+ streamingParser . ParameterHandler += parameterPart => _parameters . Add ( parameterPart ) ;
360359
361360 streamingParser . FileHandler += ( name , fileName , type , disposition , buffer , bytes , partNumber , additionalProperties ) =>
362361 {
363362 if ( partNumber == 0 )
364363 {
365364 // create file with first partNo
366- Files . Add ( new FilePart ( name , fileName , Utilities . MemoryStreamManager . GetStream ( $ "{ typeof ( MultipartFormDataParser ) . FullName } .{ nameof ( ParseStreamAsync ) } ") , additionalProperties , type , disposition ) ) ;
365+ _files . Add ( new FilePart ( name , fileName , Utilities . MemoryStreamManager . GetStream ( $ "{ typeof ( MultipartFormDataParser ) . FullName } .{ nameof ( ParseStreamAsync ) } ") , additionalProperties , type , disposition ) ) ;
367366 }
368367
369368 Files [ Files . Count - 1 ] . Data . Write ( buffer , 0 , bytes ) ;
0 commit comments