2016-03-16 4 views
0

Я переношу ASP.NET4.5 на сайт ASP.NET 5. Одна функция, которую мы вернули изображения с жесткого диска из абсолютного местоположения. Файлы arent хранятся в веб-каталоге. Раньше это работало нормально, со следующим кодом:Подавать файл извне wwwroot

public ActionResult GetVideoImage(string serialNumber, int videoEntryId) 
{ 
    try 
    { 
     var serial = Device.FriendlySerialNumberToNumericalSerialNumber(serialNumber); 

     var entry = this.service.GetVideoEntry(serial, videoEntryId); 

     if (entry != null && System.IO.File.Exists(entry.FirstVideoFrameLocation.LocalPath)) 
     { 
      return this.File(entry.FirstVideoFrameLocation.LocalPath, "image/jpeg"); // adjust content type appropriately 
     } 
    } 

    return this.Redirect("/content/noimage.png"); 
} 

К сожалению, это не работает больше, и выдает исключение. Из того, что я могу сказать, потому что this.File теперь принимает virtualPath, а не абсолютный, поэтому отказывается от идеи обслуживать файл из-за пределов своего веб-каталога.

  • Как я могу обойти это?
  • Также есть ActionResult еще лучший тип возврата для этого?
+0

Можете ли вы перенести эти файлы в веб-сайт? Причина, по которой это изменилось, - это, по моему мнению, проблема безопасности: если веб-сайт ограничен службой вещания в веб-каталоге, то гораздо труднее атаковать на веб-сайте, чтобы возвращать случайные данные с остальной части компьютера. –

+0

Возможно, вы читаете изображения как поток и возвращаете этот поток? – Thorarins

+0

@MichaelKohne К сожалению, нет, на моей машине dev ее просто в другой папке. В процессе производства файлы могут обслуживаться с другой машины – Chris

ответ

2

Я нашел ответ на резьбу MS here, которая ссылается на ASP github commit.

Короче говоря, есть новые классы, доступные в пространстве имен Microsoft.AspNet.Mvc, которые позволяют то, что я ищу. Я специально выбрал PhysicalFileResult, который работает так, как ожидалось

Смежные вопросы