Невозможно неявно преобразовать тип "System.Web.HttpPostedFile" в "System.Web.HttpPostedFileBase"

У меня есть этот метод, который не строит, это ошибки с сообщением:

Невозможно неявно преобразовать тип 'System.Web.HttpPostedFile' в 'System.Web.HttpPostedFileBase'

Мне действительно нужно, чтобы это было типа HttpPostedFileBase вместо HttpPostedFile, я пробовал бокс, и он не работает:

foreach (string inputTagName in HttpContext.Current.Request.Files)
{
    HttpPostedFileBase filebase =HttpContext.Current.Request.Files[inputTagName];
    if (filebase.ContentLength > 0)
    {
        if (filebase.ContentType.Contains("image/"))
        {
         SaveNonAutoExtractedThumbnails(doc, filebase);
        }
    }
}

Ответы

Ответ 1

Быстрый просмотр в Reflector указывает, что HttpPostedFileWrapper наследует от HttpPostedFileBase и принимает HttpPostedFile в конструкторе:

foreach (string inputTagName in HttpContext.Current.Request.Files)
{
    HttpPostedFileBase filebase = 
      new HttpPostedFileWrapper(HttpContext.Current.Request.Files[inputTagName]);

    if (filebase.ContentLength > 0)
    {
        //...

TheVillageIdiot поднимает замечательную мысль о лучшей конструкции цикла, и она будет работать для вас, если вы представляете область видимости объекта Request текущего контекста HTTP (например, на Page, но не в Global.asax > ):

foreach (HttpPostedFile file in Request.Files)
{
    HttpPostedFileBase filebase = new HttpPostedFileWrapper(file);
    // ..

Если у вас есть LINQ, вы также можете использовать его:

var files = Request.Files.Cast<HttpPostedFile>()
                .Select(file => new HttpPostedFileWrapper(file))
                .Where(file => file.ContentLength > 0 
                            && file.ContentType.StartsWith("image/"));

foreach (var file in files)
{
    SaveNonAutoExtractedThumbnails(doc, file);
}

Ответ 2

Первое, что вам не нужно сделать HttpPostedFileBase HttpPostedFile будет работать как прекрасно.

Во-вторых, ContentType MIME Content Type, вы должны заглянуть в FileName.

Попробуйте этот код:

foreach (HttpPostedFile file in Request.Files)
{
    if (file.ContentLength > 0)
    {
        if(file.ContentType.Contains("image/") //as pointed out in comment
        {
            //make second parameter of type HttpPostedFile type
            //where you define method
            SaveNonAutoExtractedThumbnail(doc,file);
        }
    }
}