Виртуальный путь в ASP.NET

Я использую этот код для своей LinkButton для загрузки файла, когда вы нажимаете на него. Недавно у меня возникла эта проблема, мне нужен виртуальный путь.

Я хотел бы перенаправить на C:\inetpub\wwwroot

 string filepath = Server.MapPath("...");           
 FileInfo myfile = new FileInfo(filepath);

Так что я не знаю, что положить в Server.MapPath(), потому что, если я поставлю /, он перейдет в базу документов моей папки, а не в

4 ответа

Решение

Если вам нужно обслуживать файлы из другой части вашей системы, то лучший способ сделать это - создать виртуальный каталог.

В IIS щелкните правой кнопкой мыши на своем веб-сайте, нажмите "Добавить виртуальный каталог". Дайте ему имя и укажите, где вам нужно. Например, новый виртуальный каталог с именем "files" указывает на "C:\inetpub\wwwroot\files".

Затем с вашего сайта вы можете ссылаться на эти файлы, используя

/files/filename.txt <- / files / будет ссылаться на ваш виртуальный каталог.

Тогда вам, конечно, нужно будет убедиться, что у вас правильно установлены разрешения на чтение этих файлов, но я оставлю это на ваше усмотрение.

В настоящее время вы видите папку под вашим My Documents потому что вы запускаете / отлаживаете в своей папке проекта, вероятно, с помощью сервера разработки или IISExpress.

Как только вы развернете свой сайт в папку под C:\Inetpub, MapPath вернет эту папку.

Но, в качестве меры безопасности, вы не можете вернуть папку выше (в дереве) в качестве корневой папки из вашего приложения.

Если вам это нужно, вы должны удалить папки из возвращенного пути самостоятельно. Ты можешь использовать System.IO.Path для этого.

Вы не можете двигаться вверх от своего корня. Корень означает корневую папку приложения. Если вы пытаетесь это сделать, это брешь в безопасности.

Так что если вы хотите перейти в корень приложения, вы можете использовать Server.MapPath("~");

Server.MapPath("~"); 

даст вам текущий корень веб-приложения.

Другие вопросы по тегам