Чтение 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/';
}
}
Если у вас есть предложение или усовершенствование этого метода, пожалуйста, прокомментируйте.