我正在编写用于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并挂钩适当的早期管道事件。