首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HttpHandler未重写

HttpHandler未重写
EN

Stack Overflow用户
提问于 2009-08-22 18:10:41
回答 4查看 2.1K关注 0票数 3

我正在写一个简单的HttpHandler重写网址,但我遇到了一个砖墙。

我已经创建了一个HttpHandler类,它非常简单,只用于测试:

代码语言:javascript
复制
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中使用了以下动词:

代码语言:javascript
复制
<httpHandlers>
  <add verb="*" path="*" type="Tizma.CMS.Runtime.HttpHandler"/>
</httpHandlers>

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

请记住,这只是一个测试,最终会向default.aspx传递一个类似于?pageid=2的查询字符串,我只是想先弄清楚how是如何工作的。

我做错了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-22 18:31:04

Andy -你不能在处理程序中调用RewritePath() -那时候就太晚了。当您遇到处理程序时,请求已经完成,RewritePath()什么也不做。

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

票数 12
EN

Stack Overflow用户

发布于 2009-08-22 19:01:40

通过使用HttpHandler,您覆盖了处理请求的整个Web Forms机制(System.Web.UI.Page实现了IHttpHandler)。在您的机器级别的web.config文件中,您将找到

代码语言:javascript
复制
<add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="true"/>

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

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

票数 2
EN

Stack Overflow用户

发布于 2009-08-22 18:20:35

你可以试试"http://urlrewriter.net/“。它提供了您需要的开箱即用解决方案。

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1316622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档