2009-05-11 11 views
12

Al intentar implementar un archivo MVC, cargue example en el blog de Scott Hanselman. Me encontré con problemas con este ejemplo de código:¿Cómo echo desde 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); 
} 

Me convertí 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 

Pero me estoy haciendo una excepción reparto no válido del compilador:

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

Hanselman publicó su ejemplo el 2008-06-27, y supongo que funcionó en ese momento. MSDN no tiene ningún ejemplo similar, entonces, ¿qué ofrece?

Respuesta

27

Simplemente trabaje con él como HttpPostedFileBase. El marco utiliza HttpPostedFileWrapper para convertir un HttpPostedFile a un objeto de HttpPostedFileBase. HttpPostedFile es una de esas clases selladas que son difíciles de probar con una unidad. Sospecho que en algún momento después de que se escribió el ejemplo, aplicaron el código del contenedor para mejorar la capacidad de probar (usando HttpPostedFileBase) controladores en el marco de MVC. Se han hecho cosas similares con las propiedades HttpContext, HttpRequest y HttpReponse en el controlador.

+0

Esto funcionó, gracias. –

+2

INFORMACIÓN ADICIONAL: Si es como yo y está creando esta función en un proyecto separado, debe incluir el archivo System.Web.Abstractions.dll para hacer referencia a HttpPostedFileBase por: http://efreedom.com/Question/1-1911151/CSharp-Reference-HttpPostedFileBase –

+0

@tvanfosson Estoy buscando esta información, ¿por HttpPostedFileBase en lugar de HttpPostedFile? ¿Tienes un enlace que puedes compartir? – codingbiz

4

El tipo correcto de usar es HttpPostedFileBase.

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

Te creo, pero ¿tienes alguna referencia? Me gustaría leer un poco más sobre la diferencia entre HttpPostedFileBase y HttpPostedFile. – Trevor