2009-05-11 16 views
12

Durante il tentativo di implementare un file MVC, caricare example sul blog di Scott Hanselman. Mi sono imbattuto in problemi con questo codice di esempio:Come faccio a trasmettere da System.Web.HttpPostedFileBase a 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); 
} 

ho convertito a 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 

Ma io sono sempre un'eccezione getto non valida dal compilatore:

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

Hanselman ha pubblicato il suo esempio nel 2008-06-27 e presumo abbia funzionato all'epoca. MSDN non ha esempi simili, quindi cosa dà?

risposta

27

Basta lavorare con esso come HttpPostedFileBase. Il framework utilizza HttpPostedFileWrapper per convertire un HttpPostedFile in un oggetto di HttpPostedFileBase. HttpPostedFile è una di quelle classi sigillate che sono difficili da testare con unità. Sospetto che a un certo punto dall'esempio sia stato scritto che hanno applicato il codice wrapper per migliorare la capacità di testare (usando i nodi HttpPostedFileBase) nel framework MVC. Cose simili sono state fatte con le proprietà HttpContext, HttpRequest e HttpReponse sul controller.

+0

Questo ha funzionato, grazie. –

+2

INFORMAZIONI AGGIUNTIVE: se sei come me e stai creando questa funzione in un progetto separato, devi includere il file System.Web.Abstractions.dll per fare riferimento a HttpPostedFileBase per: http://efreedom.com/Question/1-1911151/CSharp-Reference-HttpPostedFileBase –

+0

@tvanfosson sto cercando queste informazioni, perché HttpPostedFileBase invece di HttpPostedFile? Hai un link che puoi condividere? – codingbiz

4

Il tipo corretto da utilizzare è HttpPostedFileBase.

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

Ti credo, ma hai un riferimento? Mi piacerebbe leggere un po 'di più sulla differenza tra HttpPostedFileBase e HttpPostedFile. – Trevor

Problemi correlati