2009-05-11 11 views
12

Scott HanselmanのブログにMVCファイルアップロードexampleを実装しようとしています。私はVB.NETにそれを変換しSystem.Web.HttpPostedFileBaseからSystem.Web.HttpPostedFileにどのようにキャストしますか?

foreach (string file in Request.Files) 
{ 
    HttpPostedFile hpf = Request.Files[file] as HttpPostedFile; 
    if (hpf.ContentLength == 0) 
     continue; 
    string savedFileName = Path.Combine(
     AppDomain.CurrentDomain.BaseDirectory, 
     Path.GetFileName(hpf.FileName)); 
    hpf.SaveAs(savedFileName); 
} 

:私は、この例のコードとのトラブルに遭遇した

For Each file As String In Request.Files 
    Dim hpf As HttpPostedFile = TryCast(Request.Files(file), HttpPostedFile) 
    If hpf.ContentLength = 0 Then 
     Continue For 
    End If 
    Dim savedFileName As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Path.GetFileName(hpf.FileName)) 
    hpf.SaveAs(savedFileName) 
Next 

しかし、私は、コンパイラから無効なキャスト例外を取得しています:

Value of type 'System.Web.HttpPostedFileBase' cannot be converted to 'System.Web.HttpPostedFile'. 

Hanselmanは2008年6月27日に彼の例を掲載しました。 MSDNには同様の例がありません。

答えて

27

HttpPostedFileBaseとして動作させてください。フレームワークは、HttpPostedFileWrapperを使用して、HttpPostedFileをHttpPostedFileBaseのオブジェクトに変換します。 HttpPostedFileは、単体テストが困難な密閉されたクラスの1つです。私は、サンプルが書かれた後、いつかは、HttpPostedFileBaseを使用してMVCフレームワークでテストする能力を向上させるためにラッパーコードを適用したと考えています。コントローラ上のHttpContext、HttpRequest、およびHttpReponseプロパティでも同様のことが行われています。

+0

これはうまくいった、ありがとう。 –

+2

追加情報:あなたが私のようで、別のプロジェクトでこの関数を作成する場合は、HttpPostedFileBaseを参照するためにSystem.Web.Abstractions.dllファイルを含める必要があります。http://efreedom.com/Question/1-1911151/CSharp-Reference-HttpPostedFileBase –

+0

@tvanfossonこの情報を探していますが、なぜHttpPostedFileではなくHttpPostedFileBaseですか?共有できるリンクがありますか? – codingbiz

4

使用する正しいタイプはHttpPostedFileBaseです。

HttpPostedFileBase hpf = Request.Files[file]; 
+0

私はあなたを信じていますが、参考にしていますか?私は、HttpPostedFileBaseとHttpPostedFileの違いについてもう少し詳しくお知りになりたいと思います。 – Trevor

関連する問題