无法访问文件

时间:2017-05-11 16:42:22

标签: asp.net-mvc permissions

我继承了一个新项目。网站(MVC.NET)引用Windows 2012服务器上的文件位置(它似乎是硬编码的),但该文件与网站不在同一目录中。

部分代码使用File.Copy将文件从一个位置复制到另一个位置,但这会导致异常。

显然它在昨天工作,而今天它不是。该网站已关闭,因此我希望解决此问题。

来自浏览器的错误消息是

  

访问路径' C:\ Websites \ Website \ Content \ Images \ Uploads \ Certificate 1.jpg'被拒绝。

     

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

     

异常详细信息:System.UnauthorizedAccessException:访问路径' C:\ Websites \ Website \ Content \ Images \ Uploads \ Certificate 1.jpg'被拒绝。

     

ASP.NET无权访问所请求的资源。考虑将资源的访问权限授予ASP.NET请求标识。 ASP.NET具有基本进程标识(IIS 5上通常为{MACHINE} \ ASPNET,IIS 6和IIS 7上为网络服务,IIS 7.5上已配置的应用程序池标识),如果应用程序未模拟,则使用该标识。如果应用程序模拟通过,则标识将是匿名用户(通常为IUSR_MACHINENAME)或经过身份验证的请求用户。

     

要授予对文件的ASP.NET访问权限,请在文件资源管理器中右键单击该文件,然后选择"属性"并选择“安全”选项卡。点击"添加"添加适当的用户或组。突出显示ASP.NET帐户,并选中所需访问的框。

解决此问题的最简单方法(作为临时修复只是为了让网站启动并运行)我认为是为该文件夹授予完全权限,这意味着添加Everyone具有完全权限。它没有用。我并不好奇为什么。

我知道这有什么风险,但我的问题是为什么这不起作用。为什么我仍然会看到相同的错误消息?

我可以RDP进入服务器并无问题地访问该文件。因此,我不相信这是服务器问题(对于ServerFault或SuperUser)。

我怀疑它在.NET中是一种保护。以同样的方式(如果我没记错),我们必须在IIS中设置特殊权限以允许ASP中的父路径。

我需要做什么?

修改

我已将网站上传到另一台服务器并且同样的问题仍然存在,这表明该故障与计算机无关,但更多是由于.NET或IIS

IIS设置为使用集成管理管道(非经典),我尝试添加NETWORK SERVICE和IUSR的权限。

2 个答案:

答案 0 :(得分:4)

解决方案很奇怪......我不明白为什么/如何,但我明白了什么。我不知道这是否会对其他人有所帮助,但我已经发布了答案

该应用程序允许上传图片,这些图片存储在

C:\someUploads

加载网站后,它会将文件从C:\ someUploads复制到网站路径,如原始帖子所示。

这就是问题发生的地方。我删除了网站路径中的所有图像(如原始帖子中所示)并重新启动网站,它只是工作,按预期复制所有文件。我关闭了网站,重新启动了IIS和应用程序池(回收),它仍在运行。

答案 1 :(得分:1)

检查Web.config中是否存在该文件夹并包含

<add key="filePath" value="C:\Websites\Website\Content\Images\Uploads\" />

并检查IIS服务器位置的文件夹路径。