HttpHandler没有重写

And*_*ndy 3 c# asp.net

我正在为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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我在web.config中有以下动词:

<httpHandlers>
  <add verb="*" path="*" type="Tizma.CMS.Runtime.HttpHandler"/>
</httpHandlers>
Run Code Online (Sandbox Code Playgroud)

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

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

我究竟做错了什么?

Ric*_*ahl 12

Andy - 你不能在一个处理程序中调用RewritePath() - 那时为时已晚了.当你点击你的处理程序时,请求已经路由到完成,RewritePath()没有做任何事情.

必须在请求周期的早期调用RewritePath(比如BeginRequest或CacheModule启动之前的任何内容)才能生效,因此您很可能需要一个HttpModule并挂钩相应的早期管道事件.