2009-12-04 6 views
1

Я подозреваю, что могу неправильно формулировать этот вопрос (прошло какое-то время с тех пор, как я сделал что-то в пространстве Microsoft), но здесь.Программный доступ к каталогу ~/Content?

В сущности, я пытаюсь программно получить доступ к XML-документу с помощью каталога ~/Content. Я пытался сделать это по линии ...

XElement resourceConfigXML = XElement.Load(@"~/Content/resource_configuration.xml"); 

..но это, очевидно, не является правильным, так как строка не преобразуется в путь операционная система понимает. Таким образом, есть ли какие-либо средства для получения физического пути к этому каталогу во время выполнения?

Кстати, если это наивная идея, обреченная на неудачу/гротескное непонимание цели каталога содержимого, не стесняйтесь, дайте мне знать - в моей защите я только сталкиваюсь с .NET (MVC к счастью).

+1

Этот является «гротескным» (вашими словами) непониманием каталога содержимого. Этот файл может быть вызван любым клиентом, который может угадать URL. Это особенно важно, если он содержит информацию, которую пользователь не должен видеть. Если информация о конфигурации помещается в корневой каталог вместе с web.config с расширением .config (IIS не разрешает клиенту получать доступ к файлам .config). Если в природе больше данных, а затем помещайте их в папку APP_DATA, вы можете сохранить XML-файл - клиент также не может получить доступ к этой папке. Используйте контент для изображений, css и других файлов без aspx, к которым пользователь должен получить доступ. –

+0

@ Майкл - Спасибо за отзыв - я подозревал, что так много, поэтому ваша обратная связь очень ценится. App_Data это. :-) –

+0

Решено хорошо в одном вопросе: http://stackoverflow.com/questions/347528/using-scripts-in-a-master-page-with-asp-net-mvc – Mouffette

ответ

3

Попробуйте использовать Server.MapPath

XElement resourceConfigXML = XElement.Load(Server.MapPath(@"~/Content/resource_configuration.xml")); 
+0

Большое спасибо - время для правильной игры. :-) –

1

Вы хотите изменить это:

XElement.Load(Server.MapPath("~/Content/file.xml")) 
0

Другой способ, если вы хотите обратиться к домену вместо пути машины

XElement.Load(VirtualPathUtility.ToAbsolute("~/Content/file.xml")); 
Смежные вопросы