我在web.config中有这个:
<system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<add segment="UserFiles"/>
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
我想我会以错误的方式解决这个问题,但我似乎无法找到正确的方法来谷歌这一点。我想只授予该文件夹'UserFiles'的下载权限。我需要通过web.config这样做,因为实时环境将在Azure上,所以我不会有一台机器到RDP来改变这是IIS。
答案 0 :(得分:9)
首先,如果您使用的是Azure Web角色而不是Azure网站,那么您应该将这些内容存储在blob中。其次,这些文件是否需要保护,以便只有经过身份验证的用户才能访问它们(甚至用户只能访问自己的文件?)。
让我们假设任何人都可以从服务器下载任何文件。如果是这种情况,请在内容下创建一个名为UserFiles的目录。现在,您可以直接链接到这些文件
<a href="@Url.Content("~\Content\UserFiles\filename.ext")">MY File title</a>
现在,如果他们在身份验证方案背后受到保护,事情会变得棘手。您不希望任何人都能够下载这些项目。因此,我们采取一些措施来保护它们。
1.在解决方案的顶层创建一个名为UserFiles的文件夹。
2.在你的web.config中,让它进入无人可以访问的地方
<system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<add segment="UserFiles"/>
</hiddenSegments>
</requestFiltering>
</security>
3.创建一个MVC控制器,让我们调用它,你实际上将用它来将文件传递给用户。在这里,让我们做一个名为download的动作,它接受一个文件Id(假设你将文件信息存储在数据库中)
public FileResult Download(int id){
//perform logic to see if user has access to this file
//if access, return the file
//else return a 404
}
现在,您的文件下载链接将如下所示
@Html.ActionLink("My File Title", "Download", "Files", new{id = Model.Id})
MVC和您的代码可以访问UserData文件夹,而外部Web用户则不会。使用控制器/操作来控制内容
答案 1 :(得分:5)
App_Data
中的文件无法按照设计提供给最终用户
App_Data
用于存储数据文件。来自MSDN:
App_Data包含应用程序数据文件,包括.mdf数据库文件,XML 文件和其他数据存储文件。 App_Data文件夹由。使用 ASP.NET用于存储应用程序的本地数据库。
应用程序文件夹的内容... 未提供 响应Web请求,但可以从应用程序代码访问它。
如果人们可以从App_Data中下载数据库等内容,那将是非常糟糕的。
您需要将UserFiles
文件夹移到App_Data
的之外。