Пользовательские HttpHandlers и различные типы обработчиков
-
21-08-2019 - |
Вопрос
Вся литература, которую я вижу по созданию пользовательских обработчиков, посвящена связыванию расширения с обработчиком, напримересли бы мне нужен был обработчик для Ajax-запросов, я мог бы реализовать интерфейс IHttpHandler в классе AjaxHandler.
Теперь, чтобы иметь отдельные экземпляры AjaxHandlers, напримерDocAjaxHander, PersonAjaxHandler и т.д.как бы я мог получить базовую обработку AJAX моего класса AjaxHandler без регистрации каждой отдельной страницы * .ajax?
Решение
Похоже, вы предполагаете, что 1 HttpHandler = 1 страница или 1 элемент управления, но, как я понимаю, 1 HttpHandler может обрабатывать все страницы определенного расширения файла.
Ваш вопрос не очень ясен, и ваш ответ другому ответчику не имеет смысла...
"На самом деле, мне показалось, что это очень похоже на то, что я запрашивал Http-обработчики, используя в качестве примера обработчик .ajax".
Но я предполагаю, что вы думаете, что "DocAjaxHander" и "PersonAjaxHandler" должны быть созданы каждый для "DocAjaxControl" и "PersonAjaxControl" соответственно.Я не думаю, что это было бы необходимо, 1 обработчик должен быть в состоянии обрабатывать все ваши ajax-запросы, если вы решите сделать это таким образом, но мне кажется, что это не самое интуитивное решение для меня (с использованием HttpHandlers), во всяком случае, в деталях...
каждый объект IHttpHandler должен реализовать :
public void ProcessRequest(HttpContext context)
который позволяет :
context.Response.Write("Your JSON Response in here");
но на уровне 'ProcessRequest()' у вас нет доступа к экземпляру элемента управления, который создал вызов ajax, или к объекту 'System.Web.UI.Page', который содержит элемент управления, или к чему-либо еще.
context.Request
спешим на помощь!С помощью объекта запроса выше вы можете читать строки запросов, сеансы, и вы можете определить путь к исходному HttpRequest (т.е.PersonAjaxObject может выполнить ajax-вызов 'myPersonobjPage.ajax' для своих JSON-данных, но расширение '.ajax' отправляет запрос в ваш пользовательский http-обработчик и его метод ProcessRequest.)
Если бы я был на вашем месте и собирался использовать HttpHandler для своих вызовов ajax, я бы использовал данные строки запроса, чтобы предоставить моему обработчику достаточно информации, чтобы знать, "на какой тип объекта я тоже отвечаю", а также "какие данные запрашивает этот объект".
Надеюсь, это поможет.
Другие советы
Вы можете автоматически обрабатывать AJAX-запрос несколькими способами.Вот как это сделать с помощью веб-сервиса:
http://www.asp.net/AJAX/Documentation/Live/Tutorials/ConsumingWebServicesWithAJAXTutorial.aspx
Ну, одним из способов сделать это было бы с помощью параметров строки запроса...