Как преобразовать из System.Web.HttpPostedFileBase в System.Web.HttpPostedFile? - PullRequest
13 голосов
/ 11 мая 2009

При попытке реализовать загрузку файла 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'.

Хансельман опубликовал свой пример 2008-06-27, и я полагаю, что он работал в то время. MSDN не имеет подобных примеров, так что же дает?

Ответы [ 2 ]

27 голосов
/ 11 мая 2009

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

4 голосов
/ 11 мая 2009

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

HttpPostedFileBase hpf = Request.Files[file];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...