Способ, которым я обработал этот путь, заключается в использовании специального обработчика загрузки файлов http (для приложения asp.net webforms), и вы можете использовать его здесь. Вы даже можете создать новый подкласс ActionResult, который может принести вам тот же результат.
Способ, которым я это сделал, - создать реализацию IHttpHandler, обработать запрос и вернуть файл. Таким образом, вы не ограничены использованием виртуальных путей и, если позволяет конфигурация безопасности вашего веб-сервера, вы сможете получить доступ к любому файлу в вашей системе и вернуть его в браузер.
Что-то вроде:
public class MyFileHandler : IHttpHandler
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
string filePath = Path.Combine(@"d:\wwwroot\portal_daten", context.Request.QueryString["dateiname"]);
context.Response.ContentType = "application/pdf";
context.Response.WriteFile(filePath);
}
}
Сокращенный пример без проверки, но вы должны заполнить его. Затем зарегистрируйте обработчик в своем файле web.config:
<handlers>
<add name="MyFileHandler" path="file.axd" type="MvcApplication4.Models.MyFileHandler" verb="GET" />
</handlers>
Вам, конечно, придется переименовывать классы / пространства имен в соответствии с вашими потребностями. Фактическая веб-ссылка на файл становится:
http://[domain]/file.axd?dateiname=mypdf.pdf
Где [домен] - это ваше доменное имя / localhost или что вы используете.