asp.net MVC3 создать папку, в которую приложение может писать - PullRequest
0 голосов
/ 05 марта 2012

Мне нужно создать папку для хранения файлов внутри нее, в приложении .Net MVC3, но я думаю, что проблема общая для всех платформ ASP.Net. Проблема в том, что я могу создать папку, но не могу записать файлы, потому что System.UnauthorizedAccessException произошло. Я также попытался дать дополнительное разрешение пользователю, который в данный момент запускает веб-приложение, но ничего не изменилось. Это мой код:

if (!System.IO.Directory.Exists(fullPath))
{
    System.IO.Directory.CreateDirectory(fullPath);                    
    var user = System.Security.Principal.WindowsIdentity.GetCurrent().User;
    var userName = user.Translate(typeof(System.Security.Principal.NTAccount));
    var dirInfo = new System.IO.DirectoryInfo(fullPath);
    var sec = dirInfo.GetAccessControl();                    
    sec.AddAccessRule(new System.Security.AccessControl.FileSystemAccessRule(userName,
                    System.Security.AccessControl.FileSystemRights.Modify,
                    System.Security.AccessControl.AccessControlType.Allow)
                    );
    dirInfo.SetAccessControl(sec);                    
    System.IO.Directory.CreateDirectory(fullPath);                    
}
string fullPathFileName = System.IO.Path.Combine(fullPath, fileName);                
System.IO.File.WriteAllBytes(fullPath, viaggio.Depliant.RawFile);

Жаль, последняя строка кода всегда выдает System.UnauthorizedAccessException. Я не выдаю себя за пользователя в моем приложении, все работает под предопределенным пользователем. Что я должен сделать, чтобы создать папку и убедиться, что приложение также может создавать файлы внутри нее?

Отредактировано:

Я также пытался сохранить файлы в специальной папке App_Data, но все еще получал ошибку System.UnauthorizedAccessException. Кто-нибудь может сказать мне, почему это происходит?

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Я не хочу отвечать на свой вопрос, когда проблема настолько глупа ... Я просто пытаюсь сохранить файл без правильного имени файла: вы можете видеть, что я использую переменную fullPath для создания папкии для сохранения файла, вместо использования правильно созданного fullPathFileName.Вини меня!

0 голосов
/ 05 марта 2012

Использовать папку App_Data, цитата из http://msdn.microsoft.com/en-us/library/06t2w7da%28v=vs.80%29.aspx:

Для повышения безопасности данных, используемых приложением ASP.NET, для приложений ASP.NET была добавлена ​​новая подпапка с именем App_Data.,Файлы, хранящиеся в папке App_Data, не возвращаются в ответ на прямые HTTP-запросы, что делает папку App_Data рекомендуемым расположением для данных, хранящихся в вашем приложении, включая .mdf (SQL Server Express Edition), .mdb (Microsoft Access) или XMLфайлы.Обратите внимание, что при использовании папки App_Data для хранения данных вашего приложения удостоверение вашего приложения имеет права на чтение и запись в папку App_Data.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...