我正在编写用于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;
        }
    }
}


然后,我在web.config中使用以下动词:

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


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

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

我究竟做错了什么?

最佳答案

安迪(Andy)-您无法在处理程序中调用RewritePath()-那时这样做很晚。在您到达处理程序时,请求已经路由到完成,并且RewritePath()不会执行任何操作。

必须在请求周期的早期(例如BeginRequest或CacheModule启动之前的任何操作)调用RewritePath才能生效,因此您很可能需要HttpModule并挂钩适当的早期管道事件。

09-30 23:17