asp.net MVC3创建应用程序可以写入的文件夹

时间:2012-03-05 12:36:31

标签: c# asp.net asp.net-mvc-3 permissions

我需要在.Net MVC3应用程序中创建一个用于存储文件的文件夹,但我认为这个问题在所有ASP.Net平台上都很常见。 问题是我可以创建文件夹,但无法写入文件,因为发生了System.UnauthorizedAccessException。 我还为当前运行Web应用程序的用户尝试了额外的权限,但没有任何变化。 到目前为止,这是我的代码:

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 个答案:

答案 0 :(得分:1)

当问题是愚蠢时,我讨厌回答我自己的问题...... 我只是想在没有正确文件名的情况下保存文件:您可以看到我使用fullPath变量来创建文件夹和保存文件,而不是使用正确创建的fullPathFileName 。 责备我!

答案 1 :(得分:0)

使用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文件夹具有读写权限。