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

Posted

技术标签:

【中文标题】尝试写入文件时,C#MVC 访问路径被拒绝【英文标题】:C# MVC Access to path denied when trying to write file 【发布时间】:2011-11-29 04:03:23 【问题描述】:

我有一个 MVC 应用程序,用户可以在其中上传文件。在我写上传的文件之前,我根据日期时间创建一个目录。我从C:\ApplicationName 开始,上传完成后以C:\ApplicationName\20111001\Filename.ext 结束(理论上)。

我在本地 Windows 7 机器上的问题是我无法写入文件。

无论我授予哪个用户对目录的完全访问权限,我都会收到 "access denied" 异常。奇怪的是,日期目录创建得很好。

我已授予以下用户完全访问权限:

[当前登录用户] 网络服务 IUSR IIS_IUSRS 客人 大家

没有任何成功。我真的不明白这里发生了什么。当我授予所有人完全访问权限时,我应该能够创建文件吧?

PS:我直接使用 Visual Studio 2010 和 ASP.NET Development Server。

【问题讨论】:

我认为您使用 MVC 并不是问题的一部分。不确定(我还不太了解 MS Web 服务器权限),但您可能还需要设置应用程序的信任级别。当您部署到 IIS 时,您需要检查您的应用程序池以查看您的代码以哪个用户身份运行。 发布写入文件的代码行、文件名的确切值(首先尝试使用硬编码值,如@"C:\ApplicationName\20111001\Filename.ext")和异常信息。否则应该可以工作,因为您可以创建文件夹。 我已经按照你说的做了:System.IO.File.WriteAllBytes(@"C:\ApplicationName\20111001\Filename.ext", new byte[1] 0 );但仍然得到异常,“访问路径 'C:\ApplicationName\20111001' 被拒绝” 【参考方案1】:

我没有运行 IIS,我运行的是淡化版本“ASP.NET 开发服务器”。所以我很有限

问题在于,为了让您从应用程序写入文件目录,您需要以管理员身份运行 Visual Studio。

Windows 7 正在阻止该进程超出其沙箱,因为它以有限的权限运行。即使您的帐户是管理员也是如此。

【讨论】:

【参考方案2】:

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

【讨论】:

我已经尝试过了,但我仍然得到“拒绝访问”异常。【参考方案3】:

这可能有点帮助...可能应用程序池权限是这里的罪魁祸首:

IIS AppPoolIdentity and file system write access permissions

【讨论】:

我没有运行 IIS,我运行的是淡化版“ASP.NET 开发服务器”【参考方案4】:

我自己也遇到了同样的问题。默认情况下,IIS7 AppPools 使用 AppPoolIdentity。只需在 IIS 管理控制台中打开您的 AppPools,选择您遇到问题的那个,选择高级设置,然后在 Process Model 下将 Indentity 更改为 Built-in Acount > NetworkService。 由于您已经授予 NETWORK SERVICE 对您的文件夹的访问权限,所以一切都应该正常工作。

【讨论】:

我没有运行 IIS,我运行的是淡化版本“ASP.NET 开发服务器”。所以我很有限。

以上是关于尝试写入文件时,C#MVC 访问路径被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

“对路径的访问被拒绝.” 是怎么回事

dotnet 6.0 C# - 访问路径被拒绝

访问路径被拒绝

“对路径的访问被拒绝.” 是怎么回事

C# WPF 生成图像访问被拒绝

vs2022路径拒绝访问