1. ホーム
  2. c#

Request.Filesのforeach

2023-08-25 21:16:57

質問

ASP.NET MVCで複数のファイルをアップロードしようとしていますが、コントローラ内に次のような単純なforeachループがあります。

foreach (HttpPostedFileBase f in Request.Files)
{
    if (f.ContentLength > 0)
        FileUpload(f);
}

前のコードではこのようなエラーが発生します。

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

理解できないのは、Request.Files[1]がHttpPostedFileBaseを返すのに、それが反復されると文字列(おそらくファイル名)が返されることです。

注: これが for ループで解決できることは知っています。 また、HttpPostedFileを使用してみましたが、同じエラーでした。

どのように解決するのですか?

の列挙者は HttpFileCollection はファイルのキー(名前)を返します。 HttpPostedFileBase オブジェクトではありません。 キーを取得したら Item ( [] ) プロパティにキー (ファイル名) を指定すると HttpPostedFileBase オブジェクトを取得します。

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

    ...
}