C # - программно изменить файл web.config в веб-приложении - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь создать программу, которая изменяет и сохраняет изменения в файле web.config.Программа будет впервые настроена для веб-приложения.Я нашел способ изменить appSettings и connectionStrings, но что-то еще, и я потерпел неудачу.

Я хочу иметь возможность изменить режим аутентификации между «Windows» и «Forms».Файл web.config настраивается следующим образом:

<system.web>
   <authentication mode="Windows">
      <forms loginUrl="~/Default.aspx" timeout="120"/>
   </authentication>
</system.web>

Кроме того, вы хотите изменить режим безопасности между «Транспорт» и «Нет».Файл web.config для этого раздела выглядит примерно так:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IAlarmNotifierCommunicationService" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
          <security mode="None"/>
        </binding>
      </basicHttpBinding>
    </bindings>
</system.serviceModel>

Я попытался пойти тем же путем, что и я, для изменения appSettings и connectionStrings, но безрезультатно.Следующий код работает, чтобы изменить эти настройки:

                System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/");
                ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;

                if (section != null)
                {
                    section.ConnectionStrings["CustomerDB"].ConnectionString = string.Format("Provider=SQLOLEDB.1;Data Source={0};User ID={1};PWD={2};Initial Catalog={3}", settings.SQLserverName, settings.SQLuserName, settings.SQLpassword, settings.SQLdatabaseName);
                    config.Save();
                }

                if (System.Configuration.ConfigurationManager.AppSettings.AllKeys.Contains("ApplicationUrl"))
                {
                    config.AppSettings.Settings["ApplicationUrl"].Value = string.Format("{0}://{1}/{2}/", settings.IsHttpsEnabled ? "https" : "http", settings.IsProteusMMXHostedSite ? "customerSite.com" : "localhost", settings.ApplicationName);
                    config.Save();
                }

Я попробовал следующее, и я получил ошибку для нулевой ссылки, когда я попытался это:

            var security = config.GetSection("system.serviceModel/bindings") as System.ServiceModel.Configuration.BindingsSection;

            if (security != null)
            {
                security.ElementInformation.Properties["mode"].Value = settings.IsHttpsEnabled ? "Transport" : "None";
                config.Save();
            }

Я потратилмного времени на это, и я расстраиваюсь, поэтому любая помощь будет высоко ценится.Спасибо.

[ОБНОВЛЕНИЕ] Я ищу что-то такое же простое, как и доступ к разделам appSettings и connectionStrings и их изменение.Я думаю, что я близок к последнему фрагменту кода в этом посте, где переменная - безопасность.Без преобразования файла web.config в XML должен быть способ доступа и изменения файла web.config, о котором я говорю, при использовании класса Configuration.Я могу ошибаться, но это очень легко сделать с помощью разделов appSettings и connectionStrings.Любое руководство по этому вопросу высоко ценится.Кроме того, просто чтобы уточнить, это однократная настройка веб-приложения перед его первым запуском.Я пытаюсь настроить каждый веб-сайт, размещенный в пользовательском интерфейсе, вместо непосредственного изменения файла web.config.Еще раз спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...