我一直在寻找解决方案,但似乎找不到符合我要求的解决方案。 我有一个受密码保护的MVC应用程序并使用Identity 2.0。应用程序中存储了大量PDF文件,我只想让经过身份验证的用户能够访问。
PDF存储在很多单独的文件夹中,系统有1000个案例,每个案例都有自己的Case文件夹,如:
/Cases
/CaseId
/Letters
/Letter1.pdf
/Letter2.pdf
/Reports
/Report1.pdf
/Report2.pdf
我尝试过使用web.config
<location path="~/Cases">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
但我认为我不能使用这个,因为PDF是跨多个子文件夹,这只会保护/Cases
文件夹中的文件,而不是子文件夹中的文件,这是正确的吗?
我已经看到HttpHandler可以解决这个问题了,我试过了:
<add name="PDFHandler" verb="*" path="*.pdf" type="System.Web.StaticFileHandler" resourceType="Unspecified" />
但这似乎不适用于它自己,我还需要在MVC中写一些东西吗?
如果有人能让我知道解决这个问题的最佳方法,请指出我的解决方案。
非常感谢。
修改
的Web.config
<location path="~/Cases">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
<system.web>
<customErrors mode="Off" defaultRedirect="~/Error/Trouble">
<error statusCode="403" redirect="~/Error/NotFound"></error>
<error statusCode="401" redirect="~/Error/NotAuthorized"></error>
</customErrors>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" maxRequestLength="51200" />
<globalization uiCulture="en-GB" culture="en-GB" />
</system.web>
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="PDFHandler" verb="*"
path="*.pdf"
type="System.Web.StaticFileHandler"
resourceType="Unspecified" />
</handlers>
</system.webServer>
答案 0 :(得分:1)
不确定您的情况是否可行,但处理安全性的最佳方法是将所有PDF文件移到应用程序目录之外,并仅通过控制器上的操作访问它们。这样,您就可以处理代码中的安全性,并且它比使用配置更加健壮。
答案 1 :(得分:0)