led*_*per 5 c# asp.net asp.net-mvc azure
我在web.config中有这个:
<system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<add segment="UserFiles"/>
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
我想我会以错误的方式解决这个问题,但我似乎无法找到正确的方法来谷歌这一点.我想只授予该文件夹'UserFiles'的下载权限.我需要通过web.config这样做,因为实时环境将在Azure上,所以我不会有一台机器到RDP来改变这是IIS.
首先,如果您使用的是Azure Web角色而不是Azure网站,那么您应该将这些内容存储在blob中.其次,这些文件是否需要保护,以便只有经过身份验证的用户才能访问它们(甚至用户只能访问自己的文件?).
让我们假设任何人都可以从服务器下载任何文件.如果是这种情况,请在内容下创建一个名为UserFiles的目录.现在,您可以直接链接到这些文件
<a href="@Url.Content("~\Content\UserFiles\filename.ext")">MY File title</a>
Run Code Online (Sandbox Code Playgroud)
现在,如果他们在身份验证方案背后受到保护,事情会变得棘手.您不希望任何人都能够下载这些项目.因此,我们采取一些措施来保护它们.
1.在解决方案的顶层创建一个名为UserFiles的文件夹.
2.在你的web.config中,让它进入无人可以访问它的地方
<system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<add segment="UserFiles"/>
</hiddenSegments>
</requestFiltering>
</security>
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
现在,您的文件下载链接将如下所示
@Html.ActionLink("My File Title", "Download", "Files", new{id = Model.Id})
Run Code Online (Sandbox Code Playgroud)
MVC和您的代码将可以访问UserData文件夹,而外部Web用户则不会.使用控制器/操作来控制您的内容
| 归档时间: |
|
| 查看次数: |
6772 次 |
| 最近记录: |