Подтвердить что ты не робот

Как сделать из System.Web.HttpPostedFileBase в System.Web.HttpPostedFile?

При попытке выполнить загрузку файла MVC пример в блоге Скотта Хансельмана. Я столкнулся с проблемой с этим примером кода:

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 не имеет подобных примеров, так что дает?

4b9b3361

Ответ 1

Просто работайте с ним как с HttpPostedFileBase. Структура использует HttpPostedFileWrapper для преобразования HttpPostedFile в объект HttpPostedFileBase. HttpPostedFile - это один из тех закрытых классов, которые трудно с unit test с. Я подозреваю, что когда-то после написания примера они применили код оболочки, чтобы улучшить возможность тестирования (с использованием HttpPostedFileBase) контроллеров в среде MVC. Аналогичные вещи были выполнены с помощью свойств HttpContext, HttpRequest и HttpReponse на контроллере.

Ответ 2

Правильный тип использования - HttpPostedFileBase.

HttpPostedFileBase hpf = Request.Files[file];