foreach on Request.Files foreach on Request.Files asp.net asp.net

foreach on Request.Files


The enumerator on the HttpFileCollection returns the keys (names) of the files, not the HttpPostedFileBase objects. Once you get the key, use the Item ([]) property with the key (filename) to get the HttpPostedFileBase object.

foreach (string fileName in Request.Files){    HttpPostedFileBase file = Request.Files[fileName];    ...}


With my tab HTML is:

<input class="valid" id="file" name="file" multiple="" type="file">

Request.Files will have duplicate name in array. So you should solve like this:

for (int i = 0; i < Request.Files.Count; i++ ){    HttpPostedFileBase fileUpload = Request.Files[i];


We can use LINQ to do this and still use foreach as asked:

var files = Enumerable.Range(0, Request.Files.Count)    .Select(i => Request.Files[i]);foreach (var file in files){    // file.FileName}

As @tvanfosson said, the enumerator returns the file names as strings, not the HttpPostedFileBase. This method HttpPostedFileBase this[string name] returns the object we want. If HttpFileCollectionBase implemented IEnumerable<HttpPostedFileBase> then we could do the foreach normally. However, it implements a non-generic IEnumerable.