我在IIS7上运行的ASP.NET 3.5应用程序中使用Context.RewritePath().
我在应用程序BeginRequest事件中做它,一切工作文件.
/ sports的请求被正确地重写为default.aspx?id = 1,依此类推.
问题是在我的IIS日志中,我看到了对/Default.aspx?id=1的GET请求,而不是/ sports.
这种代码在IIS6下运行良好.
由于必须实现某些业务逻辑,因此不能使用Microsoft Rewrite模块.
谢谢.
编辑:
似乎我的处理程序在管道中太早了,但是如果我将逻辑移动到后来的事件,那么整个重写的东西都不起作用(为时已晚,StaticFileHandler接收我的请求).
我用Google搜索并用Google搜索,问道,不敢相信没有人有这个问题?
编辑:
哎呀!这是我在IIS论坛上发现的内容:
"这是因为在集成模式下,IIS和asp.net共享一个公共管道,现在IIS可以看到RewritePath,而在IIS6中,它甚至没有被IIS看到 - 你可以通过使用经典模式来解决这个问题IIS6".
最后更新:请看下面的答案,我在生产环境中使用了一年多的时间后对结果进行了更新.
经过一番研究,我终于找到了问题的解决方案.
我已使用新的(在ASP.NET 3.5中引入)Context.Server.TransferRequest()方法替换了对Context.RewritePath()方法的调用.
现在看起来很明显,但IIS Core团队的事件高级开发工程师并没有想到这一点.
我已经测试了它的会话,身份验证,回发,查询字符串......问题,但没有找到.
Tommorow我会将更改部署到一个非常高的流量站点,我们很快就会知道它是如何工作的.:)
我会回来更新.
更新:解决方案仍然不完全在我的生产服务器上,但它已经过测试,它确实有效,据我所知,到目前为止,它是我的问题的解决方案.如果我在生产中发现任何其他内容,我会发布更新.
最后的更新:我已经在生产中使用了这个解决方案超过一年,它已被证明是一个良好而稳定的解决方案,没有任何问题.