【问题标题】:Ashx handler's processrequest function is not calledashx handler 的 processrequest 函数没有被调用
【发布时间】:2026-02-22 11:50:01
【问题描述】:

我正在编写一个处理程序来处理资源,当实现的 IHttpHandler 类是在命名空间下编写时,我遇到了一个问题。

请找代码

不工作场景

Web.config:

<add name="ResourceHandler" type="PublicSite.Classes.Handlers.ResourceEndpoint, PublicSite" path="Resource.ashx" verb="*" />

属性:PublicSite.Classes.Handlers.ResourceEndpoint.IsReusable=False

问题:构造函数被命中并且 ProcessRequest 未被调用。构造类的对象,即 Constructor is hit ,但是在调用 processrequest 之前失败了 404。

工作场景

Web.config:

<add name="ResourceHandler" type="ResourceEndpoint,PublicSite" path="Resource.ashx" verb="*" />

班级:PublicSite.Classes.Handlers.ResourceEndpoint.IsReusable=True

在调用 processrequest 之前构造函数被 404 命中并失败。

当我们第二次请求处理程序时,它直接使用构造的对象,因此不会调用 construcotr,而是直接调用 ProcessRequest。顺便说一句,在第二次调用中,处理程序正在工作。

我不需要可重用的属性。 有人可以帮我找到问题。谢谢。

【问题讨论】:

  • 您是否在使用实际的 .ashx 文件并在 Web 配置中注册它?
  • 可能是这样,即使处理程序在命名空间中,您只需要在配置行中的类名,而不需要命名空间?
  • 您使用的是哪个版本的 IIS?对于 6 及以下,您需要在 下注册处理程序,但对于 7 及以上,它位于 web.config 中的 部分
  • 对不起,我已经更新了问题。这不是命名空间的原因。未调用 processrequest,并且由于未知原因发出 404。
  • @sh1rts 我已经用问题详细信息更新了问题。我试过 iis 7.5 和 8.5 ,结果一样。

标签: c# asp.net .net httphandler


【解决方案1】:

您能否向我确认您的 web.config 和处理程序本身如下所示? (这来自一个托管在 IIS 7.5 下的项目)

web.config:-

  <system.webServer>
    <handlers>
      <add name="customerHandler" 
           preCondition="integratedMode" 
           verb="*" 
           path="customerHandler.ashx"
           type="GlassCMS.HttpHandlers.CustomerHandler, GlassCMS"/>
.
.
.
    </handlers>
  </system.webServer>

HttpHandler:-

    [WebService(Namespace = "http://{redacted.com}/json-http-handlers/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class CustomerHandler : IHttpHandler
    {
        public bool IsReusable
        {
            get { return false; }
        }

        public void ProcessRequest(HttpContext context)
        {
            string json = string.Empty;

            // code to do whatever here...

            context.Response.Write(json);
        }

如果您愿意,我也可以包含 JavaScript(或者您可以在此处发布您的)。上面的这个例子来自工作代码。

【讨论】: