C# MVC尝试写入文件时访问路径被拒绝

3
我有一个MVC应用程序,用户可以上传文件。在写入上传的文件之前,我会根据日期时间创建一个目录。我从C:\ApplicationName开始,最后上传完成时得到C:\ApplicationName\20111001\Filename.ext(理论上)。但是,在我的本地Windows 7机器上,我无法写入该文件。无论给哪个用户完全访问权限,我都会收到“拒绝访问”的异常。奇怪的是,日期目录正常创建。我已经给以下用户完全访问权限:[当前登录的用户],NETWORK SERVICE,IUSR,IIS_IUSRS,Guests和Everyone,但是没有任何成功。我真的不明白发生了什么。当我给所有人完全访问权限时,我应该能够创建文件,对吗?PS:我使用Visual Studio 2010和ASP.NET开发服务器。

我认为你使用MVC并不是问题的一部分。虽然我还不确定(我对MS Web服务器权限了解不多),但你可能还需要设置应用程序的信任级别。当你部署到IIS时,你需要检查你的应用程序池,看看你的代码正在以哪个用户身份运行。 - Merlyn Morgan-Graham
发布写入文件的代码行,包括准确的文件名(首先尝试使用硬编码值,如 @"C:\ApplicationName\20111001\Filename.ext"),以及异常信息。否则,应该可以正常工作,因为您能够创建文件夹。 - Alexei Levenkov
我已经按照你说的做了:System.IO.File.WriteAllBytes(@"C:\ApplicationName\20111001\Filename.ext", new byte[1] { 0 });但是仍然出现异常,"拒绝访问路径'C:\ ApplicationName \ 20111001'" - TheGuest
4个回答

1
我没有运行IIS,而是运行了简化版本的“ASP.NET开发服务器”。所以我的功能受到了很大限制。
问题在于,为了让应用程序能够写入文件目录,您需要以管理员身份运行Visual Studio。
Windows 7正在阻止进程超越其沙盒范围,因为它以受限权限运行。即使您的账户是管理员也是如此。

1

检查父文件夹的权限,并确保它们是可继承的,您可以在高级选项窗口中进行检查。


我已经尝试过了,但我仍然收到“访问被拒绝”的异常。 - TheGuest

1

我没有运行IIS,我正在运行精简版的“ASP.NET开发服务器”。 - TheGuest

0

我自己也遇到了同样的问题。默认情况下,IIS7 AppPools使用AppPoolIdentity。只需在IIS管理控制台中打开您的AppPools,选择您遇到问题的那个,选择高级设置,在进程模型下更改身份验证为内置帐户 > NetworkService。 由于您已经授予NETWORK SERVICE访问您的文件夹,因此一切都应该正常工作。


我没有在运行IIS,而是在运行精简版的“ASP.NET Development Server”。因此,我的功能非常有限。 - TheGuest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接