Создание каталогов в среде среднего доверия?
У меня есть веб-приложение ASP.NET, работающее в среде среднего доверия с провайдером общего хостинга. Следующий код вызывает исключение SecurityException:
private void TestButton_Click(object sender, EventArgs e)
{
string directory = Server.MapPath("~/MyFolder/") + "_TestDirectory";
if (!Directory.Exists(directory))
Directory.CreateDirectory(directory);
}
Полный текст ошибки:
System.Security.SecurityException: запрос на разрешение типа "System.Security.Permissions.FileIOPermission, mscorlib, версия =2.0.0.0, Culture= нейтральный, PublicKeyToken=b77a5c561934e089" не выполнен. в System.Security.CodeAccessSecurityEngine.Check(требование объекта, StackCrawlMark& stackMark, логическое значение isPermSet) в System.Security.CodeAccessPermission.Demand() в System.IO.Directory.InternalCreateDirectory(String fullPath, String path, DirectorySecurity dirSecurity) в System.IO.Directory.CreateDirectory(Строковый путь, DirectorySecurity directorySecurity) в ASP.testcreatedirectory_aspx.TestButton_Click(Отправитель объекта, EventArgs e) Действие, которое не удалось, было: требовать Тип первого разрешения, которое не удалось: System.Security.Permissions.FileIOPermission Зона сборки, которая провалилась, была: Мой компьютер
Папка, в которой создается подпапка, имеет полные разрешения, поэтому я не думаю, что это проблема. Это похоже на работу с средой доверия.
Является ли нормальным для сред со средним доверием нормальное запрещение создания новых каталогов (с помощью метода Directory.Create), и / или есть ли обходной путь для этого?
1 ответ
Пока путь, к которому вы пытаетесь получить доступ, находится в виртуальном каталоге, в котором находится ваше приложение, вы должны иметь доступ к нему в Medium Trust. Вы уверены, что у вашего приложения есть разрешение на создание папки?
http://msdn.microsoft.com/en-us/library/aa302425
Изменить: я мог прочитать документ выше неправильно. Посмотрите и эту ссылку, похоже, у вас есть только разрешения на чтение, запись, добавление и обнаружение пути:(
FileIOPermission ограничен. Это означает, что вы можете получить доступ только к файлам в иерархии виртуальных каталогов вашего приложения. Вашему приложению предоставляются разрешения на чтение, запись, добавление и PathDiscovery для иерархии виртуальных каталогов вашего приложения.