Omar Omar - 1 year ago 251
C# Question

foreach on Request.Files

I'm attempting upload multiple files in ASP.NET MVC and I have this simple foreach loop in my controller

foreach (HttpPostedFileBase f in Request.Files)
if (f.ContentLength > 0)

The previous code generates this error:

Unable to cast object of type 'System.String' to type 'System.Web.HttpPostedFile'.

What I don't understand is why Request.Files[1] returns an HttpPostedFileBase but when it's iterated over, it returns strings (presumably the file names).

Note: I know this can be solved with a for loop.
Also, I tried using HttpPostedFile, with the same error.

Answer Source

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];

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download