我正在为 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() 不做任何事情。
RewritePath 必须在请求周期的早期调用(如 BeginRequest 或 CacheModule 启动之前的任何内容)才能有效,因此您很可能需要一个 HttpModule 并挂接适当的早期管道事件。
关于c# - HttpHandler 不重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1316622/