【问题标题】:Custom HttpHandlers and different handler types自定义 HttpHandlers 和不同的处理程序类型
【发布时间】:2009-03-20 09:27:46
【问题描述】:

我看到的所有关于创建自定义处理程序的文献都涉及将扩展与处理程序相关联,例如如果我想要 Ajax 请求的处理程序,我可以在 AjaxHandler 类中实现 IHttpHandler 接口。

现在,拥有单独的 AjaxHandler 实例,例如DocAjaxHander、PersonAjaxHandler 等。如何在不注册每个单独的 *.ajax 页面的情况下派生 AjaxHandler 类的基本 AJAX 处理?

【问题讨论】:

    标签: asp.net httphandler


    【解决方案1】:

    听起来你假设 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 方法处请求。)

    如果我是你,并且我打算使用 HttpHandler 进行 ajax 调用,我会使用查询字符串数据为我的处理程序提供足够的信息,以了解“我也响应什么类型的对象”以及'该对象请求什么数据'。

    希望对您有所帮助。

    【讨论】:

    • 感谢 Nnoel 提供的信息丰富的回答。当我问这个问题时,我实际上已经忘记了我想要实现的目标,但我不想为每个实体类型做一个页面。等我恢复记忆后,我会解决这个问题。
    【解决方案2】:

    您可以通过多种方式自动处理 AJAX 请求。以下是使用 Web 服务的方法:

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

    【讨论】:

      【解决方案3】:

      嗯,一种方法是通过查询字符串参数...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多