ASP.Net“拒绝访问路径”。文件上载控件在Web服务器中不起作用(IIS7)

时间:2016-06-22 08:16:08

标签: c# asp.net iis-7

我目前正在开发一个网站应用程序,它的一个功能是能够上传和下载文件。所有上传的文件都将存储在外部网络位置。首先是页面加载,它将创建一个临时文件夹,所有上传的文件将存储在那里。然后当他们单击保存按钮时,它将创建一个文件夹,将其永久存储并将所有文件放在文件夹中并删除自动删除临时文件夹。它在我的本地主机服务器上工作正常,但是当我上传并放到Web服务器时,它会抛出错误, 拒绝访问路径'(网络路径)'。 < /强>

  

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

     

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

我已经研究了近一个星期的解决方案了,它说它是关于许可的,但网上的所有解决方案都不清楚,对我不起作用。我希望有人可以帮助我逐步说明如何配置权限,以便能够允许任何可能的工作解决方案进行网络访问。

更新: 这是当前的截图:

IIS7中的网站权限

Permission for the web site in IIS7

我已经下载了ASP.NET组件,但是我找不到ASP.NET帐户。我有.net 4.0应用程序池。我应该授权上传文件夹吗?请帮我。

谢谢大家。

5 个答案:

答案 0 :(得分:2)

这是一个权限问题,您已经有了提示:

  

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

  1. 探索IIS管理员。
  2. 展开“网站”节点,找到您的网站,然后右键单击。
  3. 单击“浏览”,您将被重定向到物理文件路径。
  4. 右键单击该文件夹,然后转到安全选项卡
  5. 单击“编辑”按钮(将弹出另一个窗口)
  6. 在此窗口中添加iis用户,通常是IIS_MACHINENAME前缀
  7. 为此用户设置完全权限,您就可以了。

答案 1 :(得分:1)

我在同样的问题上挣扎,当我们完成所有权限更改时,我仍然收到错误。最后,我使用文件上传控件编写了一个小测试页面,当我尝试使用各种文件时,它运行正常。

我发现这两个文件名之间存在细微差别,导致错误

  • this_file1.ppf
  • thisfile1.pdf

是的,下划线导致访问冲突错误,对于我的生活,我不知道为什么?这也适用于文件名中包含空格的文件。我们正在Windows Server 2012 R2上运行Web服务器(IIS7),如果这会产生影响的话。

我在控件中没有找到任何对此的引用,尽管它也会在长文件名上失败。

答案 2 :(得分:0)

就我而言,我只是将所需文件复制到c盘中的 wwwroot文件夹,并更改了物理路径,因此解决了我的问题。

答案 3 :(得分:0)

通过以下方式修复我的问题:

  1. 文件properties
  2. security标签下,点击add
  3. 添加在我的情况下为IIS_IUSRS的iis用户,然后单击Check Names
  4. 在权限类别中单击OKgrant full-access

如果找不到IIS_IUSRS,则可以随时转到Security > Add > Advanced > Find Now查找IIS用户名。

我还通过输入当前登录的username来添加当前登录的用户,并授予完全访问权限

答案 4 :(得分:0)

只是一个提示:就我而言,以下代码不起作用并发出消息“访问路径 (...) 被拒绝。”

var Request = HttpContext.Current.Request;
foreach (string file in Request.Files)
{    
    var postedFile = Request.Files[file];    
    postedFile.SaveAs(pathToSave);
}

这个很好用:

var Request = HttpContext.Current.Request;
foreach (string file in Request.Files)
{    
    var postedFile = Request.Files[file];    
    using (var stream = new FileStream(pathToSave, FileMode.Create))
    {
       await postedFile.InputStream.CopyToAsync(stream);
    }
}