我看到的关于创建自定义处理程序的所有文献都涉及将扩展与处理程序相关联,例如,如果我想要 Ajax 请求的处理程序,我可以在 AjaxHandler 类中实现 IHttpHandler 接口。
现在,要拥有 AjaxHandler 的各个实例,例如 DocAjaxHander、PersonAjaxHandler 等。我将如何在不注册每个单独的 *.ajax 页面的情况下派生我的 AjaxHandler 类的基本 AJAX 处理?
我看到的关于创建自定义处理程序的所有文献都涉及将扩展与处理程序相关联,例如,如果我想要 Ajax 请求的处理程序,我可以在 AjaxHandler 类中实现 IHttpHandler 接口。
现在,要拥有 AjaxHandler 的各个实例,例如 DocAjaxHander、PersonAjaxHandler 等。我将如何在不注册每个单独的 *.ajax 页面的情况下派生我的 AjaxHandler 类的基本 AJAX 处理?
您可以通过多种方式自动处理 AJAX 请求。以下是使用 Web 服务的方法:
http://www.asp.net/AJAX/Documentation/Live/Tutorials/ConsumingWebServicesWithAJAXTutorial.aspx
好吧,一种方法是通过查询字符串参数...
听起来您假设 1 个 HttpHandler = 1 个页面或 1 个控件,但据我了解,1 个 HttpHandler 可以处理某个文件扩展名的所有页面。
你的问题不是很清楚,你对另一个回答者的回答毫无意义......
“事实上,在我看来,这很像我在询问 Http 处理程序,以 .ajax 处理程序为例。”
但我假设您认为应该分别为“DocAjaxControl”和“PersonAjaxControl”创建“DocAjaxHander”和“PersonAjaxHandler”。我不认为这是必要的,如果您选择这样做,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 可能对其 JSON 数据进行 ajax 调用到 'myPersonobjPage.ajax',但 '.ajax' 扩展名在您的自定义 http 处理程序中请求,它是 ProcessRequest 方法。)
如果我是你,并且我打算在我的 ajax 调用中使用 HttpHandler,我会使用查询字符串数据来为我的处理程序提供足够的信息,以了解“我也在响应什么类型的对象”以及“什么数据”是那个对象请求'。
希望有帮助。