【问题标题】:HttpHandler not rewritingHttpHandler 不重写
【发布时间】:2009-08-22 18:10:41
【问题描述】:

我正在为 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 是如何工作的。

我做错了什么?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

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

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

    【讨论】:

    • 我明白了,现在说得通了。所以处理程序必须基本上生成内容并将其输出。好的,这应该不是问题。
    • 感谢 Rick 的帮助,我现在整理好了。
    【解决方案2】:

    通过使用 HttpHandler,您将覆盖整个 Web 窗体机制来处理请求(System.Web.UI.Page 实现 IHttpHandler)。在您的机器级 web.config 文件中,您会发现

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

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

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

    【讨论】:

    • 谢谢史蒂夫。这正是我现在正在做的。我已经在我自己的自定义 HttpModule 上挂上了 BeginRequest 事件。工作一种享受:)
    【解决方案3】:

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 没错。我不希望用户 url 改变,但在内部我想用 ?pageno=3 Default.aspx 的查询字符串打开我的 default.aspx 页面,然后呈现正确的页面详细信息。我的问题是 default.aspx 似乎永远不会到达它的 Page_Load 事件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多