在MVC应用程序中,我有许多rtf文件用作模板。应用加载它们,填充空白并将结果输出为FileContentResult
。该站点的用户不应该直接访问这些rtf文件。在项目中放置它们的好地方在哪里可以访问它们?
据我所知,我可以将文件放在项目文件夹之外并为它们提供绝对路径,但出于多种原因,这听起来不错。首先,那些文件是项目不可分割的一部分,将它们移到项目之外就会陷入颠覆系统。其次,我们在两个不同的服务器上运行该应用程序的多个版本,因此我们不希望使发布变得更复杂。我们并不需要各种版本来共享这些文件,如果应用程序的每个版本都有它们的副本,那就没问题了。
答案 0 :(得分:1)
假设您的根asp.net文件夹中有一个目录模板,模板将在其中。
如果将rtf扩展名添加到IIS处理程序的IIS处理文件扩展名列表中,并拒绝访问web.config中的该文件夹,那么这将是一个解决方案。如果您使用的是IIS7,则可以使用请求过滤(http://www.iis.net/learn/manage/configuring-security/use-request-filtering)。
<location path="Templates">
<system.web>
<authorization>
<deny users="*"/>
</authorization>
</system.web>
</location>
答案 1 :(得分:0)
在寻找另一个问题的解决方案后,我意识到,事实上我在这里问一个错误的问题。我假设MVC已经有一个解决我的问题的方法(它部分以App_Data
文件夹的形式)。然而,之前我应该问自己的问题应该是“我如何限制对项目中文件夹的访问,因此用户无法直接获取文件?”。
这个问题的答案类似于nickvane写的(或者说他的答案是问题的另一种解决方案)。根据我找到的here,我可以通过在其中放置Web.config
文件来阻止对文件夹的访问。 Web.config
文件的内容应如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<authorization>
<deny users ="*" />
</authorization>
</system.web>
</configuration>
我刚测试了它,应用程序仍然可以访问文件夹中的文件,但是用户不能(这就是我想要的)。