如何在ASP.NET MVC中限制对视频文件的直接访问

时间:2018-09-23 18:47:45

标签: asp.net-mvc

在我的项目中,我有一个Upload文件夹,用户可以在其中上传视频文件,然后通过HTML5 Video Player从此文件夹查看该文件。但是,如果真实用户浏览www.mysite.com/Upload/videofilename.mp4,则还会显示视频。 我想限制对Video文件夹的直接访问。有什么办法吗?

2 个答案:

答案 0 :(得分:1)

您必须在网络配置中为上传文件夹设置 hiddenSegments 。您也可以通过IIS进行设置。 您的网站>请求过滤>隐藏的细分。 设置隐藏的细分后,任何人都无法使用url访问文件。

Webconfig

 <security>
      <requestFiltering>
        <hiddenSegments>
          <add segment="Upload"/>
        </hiddenSegments>
      </requestFiltering>
    </security>

查看页面

<video width="320" height="240" controls>    
    <source src="@Url.Action("GetMedia","Home")" type="video/mp4" />
</video>

代码

    [Authorize]
    public ActionResult GetMedia()
    {
        string fn = Server.MapPath("~/Upload/1.mp4");
        var memoryStream = new MemoryStream(System.IO.File.ReadAllBytes(fn));
        return new FileStreamResult(memoryStream, MimeMapping.GetMimeMapping(System.IO.Path.GetFileName(fn)));
    }

答案 1 :(得分:0)

您有两个选择:

选项1:

在以下方法的RegisterRoute方法中使用IgnoreRoute语句  您的RouteConfig类。 示例:

public RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("yourRoute");
    }
}

参考:https://www.c-sharpcorner.com/UploadFile/f82e9a/ignore-route-in-mvc/

选项2:

拒绝访问Asp.NET web.Config中的所有用户。 例子:

<location path="yourPath">
     <system.web>
        <authorization>
           <deny users="*"/>
        </authorization>
     </system.web>
 </location>

参考:Asp.net MVC Routing - Preventing a route to an XML file with a constraint