Почему сопоставление подстановочных знаков IIS нарушает мои вызовы AJAX?
-
13-09-2019 - |
Вопрос
Я пытаюсь использовать jQuery для выполнения некоторых вызовов AJAX, но поскольку в IIS 6 включено сопоставление подстановочных знаков (в .NET), похоже, оно не работает.Отключение сопоставления заставляет все работать волшебным образом.
Я поместил атрибут веб-метода в методы как на странице .aspx, так и на веб-службе .asmx, но ни один из них не работает.Вот пример URL-адреса, который я использую для вызовов AJAX:
localhost/UserChecker.aspx/CheckIfUserEmailsExists
localhost/UserChecker.asmx/CheckIfUserEmailsExists
Я полагаю, что это должно быть связано с тем, как .NET интерпретирует URL-адреса, но я не совсем понимаю, почему.Что еще более важно, я не знаю, как это исправить, кроме как отключить сопоставление подстановочных знаков!Есть ли другой путь???
ОБНОВЛЯТЬ
CMS, которую я использую (Kentico), выполняет некоторую маршрутизацию URL-адресов, но даже если я пропущу маршрутизацию в коде global.asax.cs, я все равно получу ошибку 404.
Заранее спасибо!
Решение
При сопоставлении подстановочных знаков в IIS сначала будет выполняться первоначальный запрос через обработчик подстановочных знаков.Это будет сделано ПЕРЕД перезаписью URL-адресов (или маршрутизацией URL-адресов) вашей CMS.
Я думаю, именно поэтому вы получаете 404.
Вы также можете попробовать отключить флажок «Проверить существование файла» в сопоставлении с подстановочными знаками, чтобы учесть сценарий, когда фактический URL-адрес позже будет перезаписан на что-то другое.
Другие советы
Это не полный ответ, но я надеюсь, что он укажет вам направление решения.
Пробовали ли вы получить доступ к URL-адресу непосредственно в браузере и использовать несколько удачно расположенных точек останова, чтобы отследить проблему?
Если вы получаете ошибку 404, похоже, ваши правила маршрутизации не работают.
[Я обновлю это, если вы дадите немного больше информации о поведении, которое вы наблюдаете]
ОБНОВЛЯТЬ
Я думаю, что может произойти следующее:
Вы предоставляете отдельное сопоставление для своих файлов с расширениями (в данном случае .aspx и .asmx):
localhost/UserChecker.aspx/CheckIfUserEmailsExists
localhost/UserChecker.asmx/CheckIfUserEmailsExists
Эти сопоставления используются, когда вы отключите сопоставления с подстановочными знаками, а параметр /CheckIfUserEmailsExists обрабатывается или игнорируется.Когда вы включаете сопоставления с подстановочными знаками, ваша маршрутизация не сообщает вашему приложению, как правильно «маршрутизировать».
Если вы удалили расширения (с включенными подстановочными знаками), будет ли работать следующее?
localhost/UserChecker/CheckIfUserEmailsExists
Добавьте соответствующие URL-адреса в список исключений:Используйте настройку «Исключенные URL-адреса» во вкладке «Менеджер сайта->Настройки».(базовая справочная документация)
Я предлагаю проверить URL-адрес за пределами вашей CMS;Проблема должна быть связана с маршрутизацией URL-адресов.Не знаю, как это работало без сопоставления подстановочных знаков.
Вопросы для понимания:1. Была ли у вас запущена CMS при попытке без сопоставления подстановочных знаков?2.Как эта система CMS взаимодействует с IIS;IASPI dll?или обработчики/модули HTTP?