Почему сопоставление подстановочных знаков IIS нарушает мои вызовы AJAX?

StackOverflow https://stackoverflow.com/questions/1271852

Вопрос

Я пытаюсь использовать 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?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top