▲求救:context.RewritePath() 的问题

meizz 2006-01-11 04:27:27
我在项目里自己实现 IHttpModule 接口,在context_BeginRequest方法里使用
context.RewritePath("/archives/2006/001.shtml");
将用户的请求转到一个 001.shtml 里去,可以在 001.shtml 里的
<!--#include file="data.inc" -->竟然没有被执行,而是原原本本地返回到浏览器里去了。
后来我把它的后缀名改成 asp 也不成,只有改成 aspx 才能被解析,现在我不想改成 aspx 后缀名,而只使用 shtml(aspx后缀名的网页第一次访问好慢),请问大家有什么好的办法,或者好的建议!
...全文
717 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
jetsmarl 2006-01-20
  • 打赏
  • 举报
回复
我被你骗了.
  • 打赏
  • 举报
回复
html里不认include,.inc也只有被包含在asp、aspx之类的服务器脚本页面中才会被执行。
建哥聊IT 2006-01-16
  • 打赏
  • 举报
回复
学习!
saucer 2006-01-13
  • 打赏
  • 举报
回复
一般的情形下,如果你的页面是静态的,就是应该让IIS直接输出,如果你坚持,建议别用RewritePath,自己读取该文件,自己处理 <!--#include file=.. -->,看到包含文件,就读取文件,加入Response
meizz 2006-01-12
  • 打赏
  • 举报
回复
思归老大,是这样的,我是在生成静态页面,其中有几个小块是多个页面共用的,我不想因为这么一个小块的变化而去生成所有相关的页面,所以我使用了include,本来是用 *.shtml 的,这样是纯静态页面,资源消耗最小,访问最快,但是我用到了一个RewritePath,目的是隐藏页面的真实路径(因为生成的静态页面的路径比较长,且不方便记忆)。Server.Transfer这个方法我也试过了,一样也是不能执行目标页面里的include,把它当成HTML文本直接返回给浏览器了。

本来用aspx后缀名也能够解决问题,但我在测试过程中发现第一次访问总是有点慢,所以我想请教一下是否有更好的模式可以解决这个问题,若有,那我这套模式就完美了。
saucer 2006-01-12
  • 打赏
  • 举报
回复
首先,在ASP.NET里没有理由使用server side include,一般应该使用用户控件来代替

当你在.aspx (或者注册由isap_aspnet.dll处理的扩展名)文件里使用
<--#include .....-->,内含的文件内容实际上是包含在.aspx里,然后被系统编译成最后的程序集的

而普通的.shtml一般情形下是由ssinc.dll处理的,但如果你在ASP.NET里写RewritePath转到一个.shtml文件时,对ASP.NET运行时而言,这只是个HTML文件而已,它不会去IIS看是否应该通过ssinc.dll再来处理

>>>aspx后缀名的网页第一次访问好慢

这也不是理由,因为你可以用编码自动编译你的ASPX文件,参考

Pre-Compiling ASP.NET Web Pages
http://authors.aspalliance.com/PaulWilson/Articles/default.aspx?id=9

或者使用ASP.NET 2.0里的pre-compile技术
gyf19 2006-01-11
  • 打赏
  • 举报
回复
我觉得:
当传入针对 Info.asp 网页的请求时,IIS 会将此消息路由到 asp.dll ISAPI 扩展。然后,该 ISAPI 扩展将加载被请求的 ASP 页面,执行该页面,并将所呈现的 HTML 返回给 IIS,然后,IIS 将该 HTML 发送回请求客户端。对于 ASP.NET 页面,IIS 会将此消息路由到 aspnet_isapi.dll ISAPI 扩展。然后,aspnet_isapi.dll ISAPI 扩展将处理操作传递给托管的 ASP.NET 辅助进程,该辅助程序将处理请求,并返回 ASP.NET 网页的呈现 HTML。

详细:
http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
gyf19 2006-01-11
  • 打赏
  • 举报
回复
楼上,如果只转到archives/2006/001.shtml ,为什么还要context.RewritePath
context.RewritePath 不是只是传值吗?
aspczlover 2006-01-11
  • 打赏
  • 举报
回复
context.RewritePath 与
context.Server.Transfer
结合等效于 Response.Redirect
而且地址栏里不会显示真实的地址了
aspczlover 2006-01-11
  • 打赏
  • 举报
回复
http://supcode.com/Article/html/4/39/2005/03/09/140039745260.shtml
aspczlover 2006-01-11
  • 打赏
  • 举报
回复
请看
http://blog.joycode.com/lostinet/archive/2004/08/21/31214.aspx
gsky 2006-01-11
  • 打赏
  • 举报
回复
坚决帮顶 http://community.csdn.net/Expert/topic/4508/4508453.xml?temp=.1320764
aspczlover 2006-01-11
  • 打赏
  • 举报
回复
或者在你的
context.RewritePath("/archives/2006/001.shtml");
后面加
context.Server.Transfer("/archives/2006/001.shtml");
meizz 2006-01-11
  • 打赏
  • 举报
回复
用 Redirect 会多一次客户端请求,最主要的是地址栏里会显示真实的地址了!
aspczlover 2006-01-11
  • 打赏
  • 举报
回复
用Response.Redirect不好吗
pwqzc 2006-01-11
  • 打赏
  • 举报
回复
up
坚决顶上去!!!
meizz 2006-01-11
  • 打赏
  • 举报
回复
我直接访问真实的 001.shtml 没有任何问题,但是通过 context.RewritePath("/archives/2006/001.shtml"); 就是不执行 include 包含呀。

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧