在尝试实施MVC文件时,请在Scott Hanselman的博客上上传example。我遇到了以下示例代码的麻烦:

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


我将其转换为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


但是我从编译器收到无效的强制转换异常:

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


Hanselman在2008-06-27上发布了他的示例,我认为它在当时是可行的。 MSDN没有类似的例子,那有什么用呢?

最佳答案

只需将其作为HttpPostedFileBase使用即可。该框架使用HttpPostedFileWrapper将HttpPostedFile转换为HttpPostedFileBase的对象。 HttpPostedFile是那些难以进行单元测试的密封类之一。我怀疑在编写示例之后的某个时候,他们应用了包装器代码以提高在MVC框架中测试(使用HttpPostedFileBase)控制器的能力。控制器上的HttpContext,HttpRequest和HttpReponse属性也完成了类似的操作。

09-04 19:18