In una applicazione web ASP.NET un file viene normalmente caricato via HTTP POST attraverso un HtmlInputFile con runat=”server” oppure tramite la sua controparte server FileUpload (introdotto con la versione 2.0 del .NET Framework). Lato code-behind si accede poi al file tramite la proprietà PostedFile identica per entrambi i controlli.
Se non abbiamo a disposizione una pagina web con i controlli sopra citati, ma la richiesta ci arriva da un applicazione esterna che utilizza ad esempio l’API Windows Internet (WinINet), dobbiamo leggere i dati direttamente dalla Request e precisamente dalla proprietà Files. Ecco come fare:

// Request with enctype="multipart/form-data"
// Destination path from Web.config
string path = Server.MapPath(ConfigurationManager.AppSettings["path"]);
foreach (string key in Request.Files.AllKeys)
{
  HttpPostedFile file = Request.Files[key];
  string fileName = System.IO.Path.GetFileName(file.FileName);
  file.SaveAs(path + fileName);
}