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

Я работаю над приложением 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="test@test.com" />
    <add key="email2" value="abc@abc.com" />
    <add key="email3" value="email@email.com" />
    <add key="email4" value="username@domain.com" />
</AdminEmails>

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

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

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

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

1 ответ

Насколько я знаю, вы не можете получить доступ к web.config внутри папки Views из контроллера, он предназначен для использования в нисходящей области папок 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>
Другие вопросы по тегам