MVC5授权文件下载MVC5

时间:2016-08-16 13:00:51

标签: asp.net-mvc file authentication razor download

我正在考虑将我的MVC5应用程序中的文件下载提供给已经授权登录的用户。 我打算使用下面的物理路径结构

App_Data/Files/{ItemName}/{FileName}.{FileExtension}(在大多数情况下,FileExtension是一个Zip)

资产

{**AssetId**, ItemName, FileName, FileExtension, FileLive}

ApprovedToDownload

{**Id**, **userId**, **AssetId**, GUID, ExpireDate, StartDate}

当人员获得授权时,userId将在ApprovedToDownload表中链接,如上所述,并创建一个动态GUID以访问该文件。 此人将下载文件,如

 /my-assets/download/GUID

控制器

  [Authorize]
        [Route("my-assets/download/{id}",Name="mydload")]
        [HttpGet]
        public FileContentResult Download(Guid? id)
        {
           int userId = User.Identity.GetUserId<int>();
          if (id == null) {
                throw new HttpException(404, "Not found"); 
            }
            var fzip = db.ApprovedToDownloads.SingleOrDefault(a => a.GUID == id && a.UserId == userId && a.FileLive && a.ExpireDate <= DateTime.Today);

            string fid = id.Value.ToString();
            string fldr=fzip.Asset.ItemName;
            string fnom = fzip.Asset.FileName;
            string fext = fzip.Asset.FileExtension;
            // Read bytes from disk
            byte[] fileBytes = System.IO.File.ReadAllBytes(Server.MapPath("~/App_Data/Files/"+fldr+"/"+fnom+"."+fext));

            return File(fileBytes, "application/zip",  fid+"."+fext);
           }

考虑到安全性,我最好的选择是什么?换句话说,任何人都可以建议我,如果我将面临任何问题,并指出我的最佳实践方向。

1 个答案:

答案 0 :(得分:0)

ActionFilters或RouteConstraints将完成我认为的技巧。

相关问题