Базовое чтение
Я предлагаю вам эти ссылки, чтобы помочь вам лучше понять варианты и выбрать то, что вы хотите:
Мой выбор
Я предпочитаю использовать jQuery.ajax()
, а также плагин шаблонов jQuery при необходимости (загрузка табличных данных из вызовов AJAX). Облегченный подход и гораздо больший контроль над разработчиком. Мне не нравится, как Microsoft любит генерировать глупые коды, когда мы используем их обработчики .
дырки в безопасности
Но ничего страшного, у вас могут возникнуть проблемы с безопасностью, как вы указали в комментариях.
Ваше замечание о легкости манипулирования Referer
было интересным, но эта уязвимость не является исключительной для jQuery. Проблема в том, что сама концепция AJAX уже несет в себе несколько дыр в безопасности , которые являются известными проблемами, обсуждаемыми годами.
Важно отметить, что использование ICallbackEventHandler
не является решением , поскольку это всего лишь еще один способ генерировать запросы AJAX без необходимости его ввода. Но если асинхронный запрос существует, он всегда может быть каким-либо образом перехвачен, например, $.ajax()
.
Наконец, вы уже дали «почти» ответ: лучше работать с передачей маркеров безопасности в качестве параметра . Если вы работаете с MasterPage
, генерация токена в HiddenField
будет абстрагирована до одного кода. И вы можете инкапсулировать с помощью функции JavaScript, ответственной за выполнение AJAX-вызовов с этим токеном в качестве параметра. Все зависит только от архитектуры программного обеспечения.
Я назвал это «почти» ответом, потому что ничто не является полностью безопасным, и токены безопасности также могут быть взломаны . Да, это намного сложнее и редко, но 99% никогда не бывает 100%.
Резюмируя
Ваш второй вариант с ICallbackEventHandler
может иметь много проблем с безопасностью, а также ваш первый вариант с $.ajax()
, так как обработчик сгенерирует некоторый код, похожий на любой код, который вы наберете. В конце концов, ваш выбор должен быть делом вкуса. Но не забудьте прочитать и принять необходимые подходы к безопасности в обоих случаях.