2009-05-11 9 views
12

En essayant d'implémenter un fichier MVC, téléchargez example sur le blog de Scott Hanselman. J'ai couru des ennuis avec ce code exemple:Comment convertir un fichier System.Web.HttpPostedFileBase en 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); 
} 

Je me suis converti à VB.NET:

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 

Mais je reçois une exception coulée non valide du compilateur:

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

Hanselman a publié son exemple le 2008-06-27, et je suppose que cela fonctionnait à l'époque. MSDN n'a pas d'exemples similaires, alors qu'est-ce qui donne?

Répondre

27

Fonctionnez simplement comme une HttpPostedFileBase. Le cadre utilise le HttpPostedFileWrapper pour convertir un HttpPostedFile en un objet de HttpPostedFileBase. HttpPostedFile est l'une de ces classes scellées qui sont difficiles à tester avec. Je suspecte que quelque temps après que l'exemple ait été écrit, ils ont appliqué le code d'enveloppe pour améliorer la capacité de tester (en utilisant des contrôleurs HttpPostedFileBase) dans l'infrastructure MVC. Des choses similaires ont été faites avec les propriétés HttpContext, HttpRequest et HttpReponse sur le contrôleur.

+0

Cela a fonctionné, merci. –

+2

INFORMATIONS SUPPLÉMENTAIRES: Si vous êtes comme moi et que vous créez cette fonction dans un projet distinct, vous devez inclure le fichier System.Web.Abstractions.dll afin de référencer HttpPostedFileBase par: http://efreedom.com/Question/1-1911151/CSharp-Reference-HttpPostedFileBase –

+0

@tvanfosson recherche cette information, pourquoi HttpPostedFileBase au lieu de HttpPostedFile? Avez-vous un lien que vous pouvez partager? – codingbiz

4

Le type correct à utiliser est HttpPostedFileBase.

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

Je vous crois, mais avez-vous une référence? Je voudrais lire un peu plus sur la différence entre HttpPostedFileBase et HttpPostedFile. – Trevor

Questions connexes