В Visual Studio C# есть ли способ применить преобразования веб-конфигурации к файлам Javascript?

В Visual Studio у меня есть код Javascript на сайте, который я разрабатываю. Во время отладки я использую вызов $ajax для «localhost». При развертывании это должен быть фактический сервер:

$('#textInput_UserName').focusout(function () {
    var _username = $('#textInput_UserName').val();
    $.ajax({
        url: 'http://localhost:8809/Account/UserNameExists/',
        data: { username: _username },
        dataType: 'html',
});

Когда я публикую, мне нужно преобразовать этот локальный хост в фактический домен:

$('#textInput_UserName').focusout(function () {
    var _username = $('#textInput_UserName').val();
    $.ajax({
        url: 'http://www.mydomain.com/Account/UserNameExists/',
        data: { username: _username },
        dataType: 'html',
});

Есть ли простой/автоматический способ сделать это, аналогичный тому, как работают преобразования Web Config?

Большое спасибо!


person Hairgami_Master    schedule 06.06.2012    source источник
comment
Не можете ли вы ввести это значение в JS из конфигурации?   -  person Oded    schedule 06.06.2012
comment
@Oded- спасибо, я не понимаю, что вы имеете в виду. Как ты это делаешь?   -  person Hairgami_Master    schedule 06.06.2012
comment
Я думаю, вы можете использовать события после сборки для своего проекта. [ссылка]msdn.microsoft.com/en -us/library/42x5kfw4%28v=vs.80%29.aspx Я бы рекомендовал использовать глобальную переменную для js, например domainUrl, и использовать ее для создания URL-адреса в ваших js-файлах url: domainUrl + '/Account/'   -  person cycaHuH    schedule 06.06.2012
comment
На самом деле вы можете создать файл .js с настройками для каждой из используемых вами конфигураций. Затем просто используйте преобразования web.config, чтобы система знала, какой файл .js ей следует использовать.   -  person cycaHuH    schedule 06.06.2012
comment
@cycaHuH, у тебя есть пример?   -  person Kien Chu    schedule 08.05.2017


Ответы (3)


Вы этого не делаете, вы просто опускаете хост, браузер заполнит его за вас, например:

$('#textInput_UserName').focusout(function () {
    var _username = $('#textInput_UserName').val();
    $.ajax({
        url: '/Account/UserNameExists/',
        data: { username: _username },
        dataType: 'html',
});

Если вы на самом деле говорите о запросах x-домена, в чем я сомневаюсь, просто установите глобальную переменную сайта js.

person mattmanser    schedule 06.06.2012
comment
Ха! Ты серьезно? Какой я идиот! Все еще любопытно, возможно ли это для других сценариев, но огромное спасибо! - person Hairgami_Master; 06.06.2012
comment
Ага! Это почти одна из тех вещей, о которых вы забываете, что вам нужно кому-то рассказать... Она следует всем тем же правилам, что и аналогичные вещи, такие как img src, поэтому вы можете использовать абсолютные или относительные пути. - person mattmanser; 06.06.2012
comment
Хорошее решение, но оно не будет работать для таких вещей, как URL-адрес API, который может указывать на совершенно разные серверы в зависимости от среды. - person Zero3; 09.05.2016

Я рекомендую вам использовать это:

url: '<%= ResolveClientUrl("~/Account/UserNameExists/")',

Если вы сделаете это таким образом, вы избежите проблем, если вы:

  • установить приложение в виртуальный каталог вместо корня домена
  • переместите свою страницу на другой уровень каталога в своем приложении
  • используйте свою службу с главной страницы или пользовательского элемента управления, который может быть создан на разных страницах, таким образом, уровни каталога

Вы также можете открыть общедоступное свойство на своей странице/пользовательском элементе управления/мастер-странице и использовать его из кода таким же образом, т.е.:

  • код на странице/uc/master: public string ServiceUrl { get { return ResolveClientUrl("~/Account/UserNameExists/");}
  • код в .aspx: url: '<%= ServiceUrl',
person JotaBe    schedule 07.06.2012

Вы звоните в веб-службу или какова цель этого URL-адреса? Когда я работаю с ajax-вызовами в своих веб-приложениях, я обычно настраиваю методы внутри веб-службы и вызываю их следующим образом:

 $.ajax({
        type: "POST",
        url: "../Services/BookingService.asmx/GetVerifiedReservations",
        data: paramsJson,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        success: function (response) {
            invalidDays = $.parseJSON(response.d);
        },
        error: function (xhr, textStatus, thrownError) {
            alert(textStatus);
            alert(thrownError);
        }
    });

Как видите, путь указан относительно остальных файлов в вашем домене.

person Jesse Carter    schedule 06.06.2012