Доступ к данным из web.config (в папке представлений)

Я работаю над приложением MVC, и в определенном разделе веб-сайта мне нужно отправлять уведомления по электронной почте (я предполагаю, что максимум 10). Поэтому я подумал, что сохраню электронные письма в виде списка в файле web.config, а затем перебираю список для отправки писем.

Сначала мне надоело создавать настраиваемый раздел и добавлять нужные мне данные (в основной файл web.config) вот так (Справочник):

Мой код:

файл web.config:

<configSections>
    <section
        name="AdminEmails"
        type="System.Configuration.NameValueFileSectionHandler,System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>

<AdminEmails>
    <add key="email1" value="[email protected]" />
    <add key="email2" value="[email protected]" />
    <add key="email3" value="[email protected]" />
    <add key="email4" value="[email protected]" />
</AdminEmails>

Код в контроллере:

NameValueCollection section = 
    (NameValueCollection)ConfigurationManager.GetSection("AdminEmails");

//... loop through emails in 'AdminEmails' section...

Но затем я получил сообщение об ошибке, в котором говорилось, что не может быть дубликата <configSection>, поскольку в другом файле web.config уже был <configSection>. Поэтому вместо этого я добавил данные в файл web.config, сохраненный в папке представлений. Веб-сайт работал, однако переменная section была null. Я думаю, это потому, что ConfigurationManager.GetSection() попытался получить раздел из «основного» файла web.config. Я не знаю, возможно ли получить доступ к файлу web.config, сохраненному в папке представлений, через код.


person Daniel Grima    schedule 11.09.2013    source источник


Ответы (1)


Насколько я знаю, вы не можете получить доступ к web.config внутри папки Views из контроллера, он предназначен для использования в нисходящей области видимости папок.

В любом случае ошибка, которую вы получаете, говорит о том, что вы определяете повторяющийся раздел, поэтому попробуйте добавить свой настраиваемый раздел после существующих разделов в корневом файле web.config, например:

<configuration>
  <configSections>
    <!-- YOUR SECTION -->
    <section name="AdminEmails" type="System.Configuration.NameValueFileSectionHandler,System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <!-- EXISTING SECTIONS -->
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"></sectionGroup>
    </sectionGroup>
  </sectionGroup>
</configSections>
person Daniele    schedule 11.09.2013
comment
Спасибо за ответ. Но странно то, что в моем корневом файле web.config нет тега ‹configSections›, он существует только в файле view web.config. Однако я получал ошибку «повторяющийся раздел». Этого не произошло после того, как я поместил настраиваемые разделы в файл views web.config. - person Daniel Grima; 11.09.2013