Asp.net mvc 在asp.net MVC中防止直接文件访问

Asp.net mvc 在asp.net MVC中防止直接文件访问,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-5,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc 5,我有一个名为PrivatePdf的文件夹,它是可读写的,在那里我存储了用户的pdf文件。我想只允许用户自己通过直接粘贴链接来访问pdf文件。例如:当其他用户将链接abc.com/PrivatePdf/123.pdf粘贴到浏览器中时,它不会显示pdf文件 注意:PrivatePdf文件夹允许读/写,我不希望将其保存在App_数据文件夹中。用户身份验证基于asp.net标识如果使用Windows身份验证(不太可能),则可以使用文件系统级权限。否则,我建议您为该文件夹中的所有(或者可能只是PDF)文件

我有一个名为PrivatePdf的文件夹,它是可读写的,在那里我存储了用户的pdf文件。我想只允许用户自己通过直接粘贴链接来访问pdf文件。例如:当其他用户将链接abc.com/PrivatePdf/123.pdf粘贴到浏览器中时,它不会显示pdf文件


注意:PrivatePdf文件夹允许读/写,我不希望将其保存在App_数据文件夹中。用户身份验证基于asp.net标识

如果使用Windows身份验证(不太可能),则可以使用文件系统级权限。否则,我建议您为该文件夹中的所有(或者可能只是PDF)文件设置一个处理程序,并实现您自己的限制逻辑。 要注册处理程序,您需要在文件夹内的新web.config中添加如下内容:

<?xml version="1.0"?>
<configuration>
    <system.web>
        <httpHandlers>
            <add verb="*" path="*.pdf" type="MyHandler, MyAssembly"/>
       </httpHandlers>
    </system.web>
</configuration>

处理程序必须实现IHttpHandler,并且在其ProcessRequest方法中,您需要通过查看HttpContext.user.Identity.IsAuthenticated或HttpContext.user.Identity.Name来检查用户是否已通过身份验证,并查看用户是否有权访问HttpContext.Request属性中提供的假装文件