c# - HttpHandler 不重写

标签 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;
        }
    }
}

然后我在 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/

相关文章:

c# - 如何获取字符串的特定部分并将它们分配给 C# 中的变量?

c# - 如何在 asp.net core web api 中绑定(bind) Json 查询字符串

c# - 带有填充的菜单项的悬停问题

c# - HTTP 错误 500.19 - 无法读取配置文件

gridview asp.net 中的 javascript 计时器

c# - 如何分组和计算逗号分隔字符串中项目的出现次数

c# - 如何使文件路径到达解决方案特定文件夹中的文件?

c# - 如何从 Controller 重启 BackgroundService

c# - 从问题背后的代码调用JS函数

asp.net - 是否可以强制 Visual Studio 2010 使用 Visual Basic 10?