代码之家  ›  专栏  ›  技术社区  ›  Andy

HttpHandler未重写

  •  3
  • Andy  · 技术社区  · 16 年前

    我正在为URL重写编写一个简单的HttpHandler,但我遇到了麻烦。

    我创建了一个HttpHandler类,它非常简单,仅用于测试:

    public class HttpHandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            context.RewritePath("default.aspx", false);
            //Rewriter.Rewrite(context);
        }
    
        public bool IsReusable
        {
            get
            {
                return true;
            }
        }
    }
    

    <httpHandlers>
      <add verb="*" path="*" type="Tizma.CMS.Runtime.HttpHandler"/>
    </httpHandlers>
    

    我基本上希望所有传入的URL都通过这个重写器。当我运行此命令时,ProcessRequest会触发,但重写路径永远不会到达default.aspx。

    请记住,这只是一个测试,最终default.aspx将被传递一个查询字符串,行为?pageid=2。我只是想先弄清楚httphandlers是如何工作的。

    我做错了什么?

    4 回复  |  直到 16 年前
        1
  •  12
  •   Rick Strahl    16 年前

    Andy-你不能在处理程序中调用RewritePath()-那时候太晚了。当您点击处理程序时,请求已经路由到完成,并且RewritePath()不做任何事情。

        2
  •  2
  •   stevemegson    16 年前

    System.Web.UI.Page 工具 IHttpHandler )。在计算机级别的web.config文件中,可以找到

    <add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="true"/>
    

    default.aspx 不会有太大的效果,因为您的web.config覆盖了默认的处理程序映射,并说应该调用您的HttpHandler来处理所有URL,包括 default.aspx .

    您需要一个HttpModule,最有可能处理 BeginRequest 事件HttpModule可以在整个请求生命周期中处理单个事件,而无需覆盖所有标准行为。

        3
  •  1
  •   Gokul    16 年前
        4
  •  0
  •   harpo Binary Worrier    16 年前

    你希望看到什么?重写路径在内部更改路径,而不向用户显示不同的URL。如果调用了default.aspx,那么它正在工作。