2009-05-11 9 views
12

Beim Versuch, eine MVC-Datei zu implementieren, laden Sie example auf Scott Hanselman Blog. Ich lief in Schwierigkeiten mit diesem Beispielcode:Wie kann ich von System.Web.HttpPostedFileBase in System.Web.HttpPostedFile umwandeln?

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); 
} 

ich es VB.NET konvertiert:

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 

Aber ich bin eine ungültige Besetzung Ausnahme vom Compiler bekommen:

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

Hanselman hat sein Beispiel am 2008-06-27 veröffentlicht, und ich nehme an, dass es zu der Zeit funktionierte. MSDN hat keine ähnlichen Beispiele, also was gibt es?

Antwort

27

Einfach mit ihm als HttpPostedFileBase arbeiten. Das Framework verwendet den HttpPostedFileWrapper, um ein HttpPostedFile in ein Objekt von HttpPostedFileBase zu konvertieren. HttpPostedFile ist eine dieser versiegelten Klassen, für die der Unit-Test schwierig ist. Ich vermute, dass irgendwann nachdem das Beispiel geschrieben wurde, sie den Wrapper-Code anwendeten, um die Fähigkeit zu verbessern, (unter Verwendung von HttpPostedFileBase) Controller im MVC-Framework zu testen. Ähnliche Dinge wurden mit den Eigenschaften HttpContext, HttpRequest und HttpReponse auf dem Controller gemacht.

+0

Das hat funktioniert, danke. –

+2

ZUSÄTZLICHE INFO: Wenn Sie wie ich sind und Sie diese Funktion in einem separaten Projekt erstellen, müssen Sie die Datei System.Web.Abstractions.dll enthalten, um die HttpPostedFileBase per verweisen: http://efreedom.com/Question/1-1911151/CSharp-Referenz-HttpPostedFileBase –

+0

@tvanfosson bin auf der Suche nach dieser Information, warum HttpPostedFileBase anstelle von HttpPostedFile? Hast du einen Link, den du teilen kannst? – codingbiz

4

Der richtige zu verwendende Typ ist HttpPostedFileBase.

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

Ich glaube dir, aber haben Sie eine Referenz? Ich möchte etwas mehr über den Unterschied zwischen HttpPostedFileBase und HttpPostedFile lesen. – Trevor

Verwandte Themen