我正在使用这个小的外联网服务,用户可以登录,获取各种信息并下载少量文件。
是否可以在MVC asp.net项目中保护根文件夹?我有一个项目,用户必须在使用任何材料之前登录。如果我使用例如" / material"每个pdf,jpg等文件的文件夹,其他未经授权的用户也可以看到这些文件。
例如,每个人都可以看到这个文件,如果他们输入www.example.com/material/pdf-file.pdf所以我只希望授权/登录的用户看到这个文件。这可能吗?
答案 0 :(得分:2)
我设法让它发挥作用。我就是这样做的。
第一个我将此行添加到Web.config文件中:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
这允许。urf中的.pdf,.png等中的点字符。
我为控制器添加了RouteConfig.cs新路由。
routes.MapRoute(
name: "Material",
url: "Material/Download/{file}",
defaults: new { controller = "Material", action = "Download", file = UrlParameter.Optional }
);
我创建了一个新的控制器“Material”。
// GET: Material
[Authorize]
public ActionResult Download(string file)
{
string path = Server.MapPath(String.Format("~/App_Data/Material/{0}", file));
if(System.IO.File.Exists(path))
{
string mime = MimeMapping.GetMimeMapping(path);
return File(path, mime);
}
return HttpNotFound();
}
并且还在app_data中传输了材料文件夹。
这似乎很好用。只有授权用户才能访问材料文件夹。
答案 1 :(得分:0)
可以这样做,但有很多方法可以做到这一点。
简化的方案可能是:
HtmlHelper
生成它们,这会将客户端重定向到&#34;包装器&#34;控制器动作。您可以在参数中传递文件名。[Authorize]
属性或更好,但不使用这些属性,你可以使用FluentSecurity来处理授权。创建&#34;包装后&#34;控制器URL
获取文件可能如下所示:
www.example.com/ 下载 / 文件 /pdf-file.pdf
此示例URL
假定控制器名称为&#39; download&#39;和操作名称是&#39;文件&#39;。