在IIS上部署ASP.NET Core应用时,常遇到文件访问被拒绝的错误:
System.UnauthorizedAccessException: Access to the path 'D:\websites\example.com\Data\Data.config' is denied.
at System.IO.File.WriteToFile(String path, FileMode mode, String contents, Encoding encoding)
...
问题根源
此错误的核心原因是:IIS应用程序池的运行身份对目标目录缺少写入权限。
默认情况下,IIS应用程序池使用虚拟账户运行(如 IIS AppPool\DefaultAppPool),这些账户在文件系统上仅有有限权限,无法在需要写入文件时完成操作。
解决方案
为应用程序池身份添加目录写入权限
这是最直接有效的解决方案,操作步骤如下:
步骤1:确定应用程序池名称
- 打开IIS管理器
- 左侧选择”应用程序池”
- 找到你的应用池名称(如DefaultAppPool或自定义名称)
步骤2:设置目录权限
-
定位目标目录
- 找到报错中提示的目录路径
- 示例:
D:\websites\api.example.com\Data\
-
添加权限(通过Windows资源管理器):
- 右键点击目标目录 → 选择”属性”
- 切换到”安全”选项卡
- 点击”编辑”按钮
- 点击”添加”按钮
-
指定应用程序池身份:
- 在”输入对象名称来选择”框中输入:
IIS AppPool\你的应用池名称 - 示例:
IIS AppPool\DefaultAppPool - 点击”检查名称”验证
- 点击”确定”
- 在”输入对象名称来选择”框中输入:
-
分配权限:
- 选择新添加的应用程序池身份
- 在权限列表中勾选”修改”或”完全控制”
- 建议选择”修改”权限(遵循最小权限原则)
- 点击”确定”保存设置
步骤3:验证解决
-
重启应用程序池:
- IIS管理器 → 应用程序池
- 右键点击你的应用池 → 选择”回收”
-
重新访问应用,确认错误已解决
注意事项
- 权限继承:确保权限正确应用到子文件和子目录
- 应用范围:仅对需要写入的目录(如Data、Logs、App_Data等)添加写入权限
- 安全性:避免对整个网站目录或系统目录授予过高的权限
总结
“IIS访问路径被拒绝”错误的核心是权限配置问题。通过为应用程序池身份添加目标目录的写入权限,可以有效解决此类文件访问问题。此方法简单直接,适用于大多数IIS部署场景,且符合Windows安全最佳实践。
记住关键点:找到应用池名称 → 定位目标目录 → 添加应用程序池身份 → 授予适当权限。按照这个流程,你可以快速解决类似的IIS文件权限问题。










