Чтение web.config из JavaScript

Есть ли способ, которым я могу читать значения конфигурации в web.config с javascript? Почему я хочу это сделать?

У меня есть таймер на моем веб-сайте, который выведет модальный диалог с таймером обратного отсчета (отсчет в течение 2 минут), если пользователь неактивен в течение 20 минут. Если пользователь не отвечает, он выводит его из системы. Если он это делает, он пингует серверу (для поддержания сеанса) и сохраняет сеанс в режиме ожидания

Эти 15 минут жестко закодированы в файле js. Я предпочел бы получить его из файла конфигурации/другого файла, чем его жесткое кодирование в JS

вот фрагмент кода

$.fn.idleTimeout = function(options) {
        var defaults = {
                    //I would like to pick these values from some config file
            inactivity: 900000, //15 minutes 
            noconfirm: 120000, //2 minutes
            sessionAlive: 900000, //15 minutes
            click_reset: true,
            logout_url: '/Views/Pages/Timeout.aspx' 
        }

Любые предложения?

Изменить: это отдельный файл js. Doing <% =% > выдаст ошибку "незаконный символ XML [Break on this error] inactivity: <% = ConfigurationManager.AppSettings [ "Бездействие" ]% > ; "

Ответ 1

Вы можете создать свой JavaScript из ASP.NET.

Затем просто напишите настройки со стороны сервера на var defaults следующим образом:

var defaults = {
    inactivity: <%=ConfigurationManager.AppSettings["Inactivity"] %>
}

EDIT:

Если вы хотите сохранить свой JavaScript в статических js файлах, вы все равно можете инициализировать свой var defaults из небольшого <script>, отображаемого вашим приложением ASP.NET. Ваши настройки будут глобальными, как и AppSettings в web.config.

Ответ 2

Передайте их в виде переменных из представления.

<script type="text/javascript">
   // needs to reside in your *.aspx file.
   $(function() {
       initPage(<%= Settings.Default.Inactivity %>, <%= Settings.Default.NoConfirm %>, <%= Settings.Default.LogoutUrl %>)
    });
    // Can reside in your *.aspx or in a *.js file.
    function initPage(inactivity, noconfirm, logoutUrl) {
        $.fn.idleTimeout = function(options) {
            inactivity: inactivity,
            noconfirm: noconfirm,
            logout_url: logoutUrl
        };
    };
</script>

Повторите все так же, как у вас.

Ответ 3

Прямой доступ к файлу конфигурации из отдельного статического файла JS невозможен. Один из способов сделать это - добавить java-скрипт на страницу .aspx.

Моя веб-конфигурация:

<appSettings>
   <add key="test" value="textBox"/>
</appSettings>

Моя страница aspx enter image description here

Мы глобально устанавливаем эту переменную, чтобы получить доступ к этой переменной внутри нашего статического js файла my js файла home.js

function ReadConfigSettings()
{
   alert( test);
}

Таким образом, мы можем прочитать значения веб-конфигурации из JavaScript таким образом.

Ответ 4

После размещения значений в файле конфигурации на странице, которую вы будете использовать, введите java script следующим образом: вы получите доступ к значению в java script как глобальное, это не необходимо объявить его.

в веб-конфигурации:

 </appSettings>
    <add key="varName" value="1" />
  </appSettings>

на странице html:

<script>
    var varName= '@System.Configuration.ConfigurationManager.AppSettings["varName"]';
</script>

Ответ 5

Обычно вы не хотите, чтобы web.config был напрямую доступен для клиентов, поскольку он может содержать некоторую важную информацию о вашей конфигурации (например, учетные данные для используемой вами базы данных).

Лучше сделать свой JS файл динамическим и добавить соответствующие параметры из вашей конфигурации. Например:

$.fn.idleTimeout = function(options) {
    var defaults = {
                //I would like to pick these values from some config file
            inactivity: <%=ConfigurationManager.AppSettings["Inactivity"].ToString() %>, 
            noconfirm: <%=ConfigurationManager.AppSettings["NoConfirm"].ToString() %>, //2 minutes
            sessionAlive: <%=ConfigurationManager.AppSettings["SessionAlive"].ToString() %>, //15 minutes
            click_reset: true,
            logout_url: '/Views/Pages/Timeout.aspx' 
    }

Ответ 6

Сделайте свой JS файл динамическим и запустите его с помощью серверной стороны script, которая может читать ваш web.config

Ответ 7

Например, у вас есть переменная appsettings определенная как

add key="ApplicationId" value="2"

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

<% var appId= ConfigurationManager.AppSettings["ApplicationId"]; %>

Теперь из файла java-скрипта вы можете получить доступ к этой переменной, поскольку эта переменная siteHost имеет глобальную область видимости в java-скрипте.

Таким образом, вы можете получить доступ к этой переменной в вашем файле .js как,

alert(appId);

Ответ 8

Я попробовал следующий способ, и это сработало для меня на странице .aspx, с которой я работаю. То, что я заметил, что не работает для меня, использует '[', вместо этого я использовал '(', и это сработало для меня.

var key = '<%=System.Configuration.ConfigurationManager.AppSettings("Environment").ToString() %>';

Ответ 9

Используя обычный js, вы можете использовать это в вашем layout.htmlcs, в начале:

  @{

        <script>
            sessionStorage.setItem("ProductionHostURL", '@System.Configuration.ConfigurationManager.AppSettings["ProductionHostURL"]');
        </script>

}
<!DOCTYPE html>

Затем в вашем основном js файле layout.htmlcs вы можете использовать этот метод, подобный этому:

var urlBaseProduction;
var urlBaseDevelopment;

    $(document).ready(function () {
      configureHostEnvironment()
     ....
    }

В этом методе настройте переменные для использования в производстве и разработке, например:

function configureHostEnvironment(){

    HOST = sessionStorage.getItem("ProductionHostURL")
    if (HOST.length <= 0) {
        alert("Host not configured correctly")
    } else {
        urlBaseProduction= host + '/api/';
        urlBaseDevelopment= host + port + '/api/';
    }
}

Если у вас есть предложение или усовершенствование этого метода, пожалуйста, прокомментируйте.