Пользовательские HttpHandlers и разные типы обработчиков - PullRequest
0 голосов
/ 20 марта 2009

Вся литература, которую я вижу по созданию пользовательских обработчиков, касается связывания расширения с обработчиком, например, если бы я хотел обработчик для запросов Ajax, я мог бы реализовать интерфейс IHttpHandler в классе AjaxHandler.

Теперь, чтобы иметь отдельные экземпляры AjaxHandlers, например, DocAjaxHander, PersonAjaxHandler и т. Д. Как получить базовую обработку AJAX моего класса AjaxHandler без регистрации каждой отдельной * .ajax страницы?

Ответы [ 3 ]

0 голосов
/ 05 июня 2009

Ну, один из способов сделать это - использовать параметры строки запроса ...

0 голосов
/ 25 августа 2011

Похоже, вы предполагаете, 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

на помощь! С указанным выше объектом Request вы можете прочитать QueryStrings, Sessions, и вы можете определить путь к исходному HttpRequest (т.е. PersonAjaxObject может сделать ajax-вызов myPersonobjPage.ajax для своих данных JSON, но расширение .ajax вызывает запросите ваш собственный обработчик http и его метод ProcessRequest.)

Если бы я был вами, и я собирался использовать HttpHandler для своих вызовов ajax, я бы использовал данные строки запроса, чтобы предоставить обработчику достаточно информации, чтобы знать, «какой тип объекта я тоже отвечаю», а также «какие данные запрашивает этот объект».

Надеюсь, это поможет.

0 голосов
/ 20 марта 2009

Вы можете автоматически обрабатывать AJAX-запрос несколькими способами. Вот как это сделать с помощью веб-службы:

http://www.asp.net/AJAX/Documentation/Live/Tutorials/ConsumingWebServicesWithAJAXTutorial.aspx

...