Куда класть статические файлы, к которым предполагается доступ только у приложения?

В приложении MVC у меня есть несколько файлов rtf, которые используются в качестве шаблонов. Приложение загружает их, заполняет пробелы и выводит результат как FileContentResult. Пользователи сайта не должны иметь прямого доступа к этим rtf-файлам. Где было бы хорошо разместить их в проекте, чтобы доступ к ним был таким, как описано?

Я понимаю, что могу поместить файлы за пределы папки проекта и указать абсолютный путь к ним, но это звучит как плохая идея по ряду причин. Во-первых, эти файлы являются неотъемлемой частью проекта, и перемещение их за пределы проекта приведет к беспорядку в системе подрывной деятельности. Во-вторых, мы запускаем несколько версий приложения на двух разных серверах, поэтому мы не хотим усложнять публикацию. На самом деле нам не нужны разные версии для обмена этими файлами, это нормально, если каждая версия приложения имеет их копию.


person jahu    schedule 29.05.2014    source источник
comment
Можно ли их занести в базу?   -  person Peter Smith    schedule 29.05.2014
comment
@PeterSmith Возможно, да, но мы не хотим использовать это решение. Я думаю, что нашел решение своей проблемы, когда искал решение другой проблемы. Я видимо не правильно сформулировал вопрос.   -  person jahu    schedule 29.05.2014


Ответы (2)


Допустим, у вас есть каталог Templates в корневой папке asp.net, где будут храниться шаблоны.

Если вы добавите расширение rtf в список обрабатываемых расширений файлов в IIS для обработчика ASP.NET и запретите доступ к этой папке в файле 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>
person nickvane    schedule 29.05.2014
comment
Это очень близко к решению, с которым я столкнулся. Я опубликую свой, как только убедюсь, что он работает на 100% так, как я хочу. - person jahu; 29.05.2014

Поискав решение еще одной проблемы, я понял, что на самом деле я задаю здесь неправильный вопрос. Я предположил, что у MVC уже есть решение для моей проблемы (и частично в виде папки App_Data). Однако вопрос, который я должен был задать себе раньше, должен был звучать так: «Как мне ограничить доступ к папке в моем проекте, чтобы пользователи не могли получить ее файлы напрямую?».

Ответ на этот вопрос аналогичен тому, что написал nickvane (точнее его ответ - альтернативное решение проблемы). Основываясь на том, что я нашел здесь, я могу заблокировать доступ к папке, поместив в нее файл Web.config. Содержимое файла Web.config должно быть следующим:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <authorization>
      <deny users ="*" />
    </authorization>
  </system.web>
</configuration>

Я только что проверил это, и приложение все еще может получить доступ к файлам в папках, но пользователи не могут (это то, что я хотел).

person jahu    schedule 29.05.2014