【发布时间】:2011-03-23 19:34:15
【问题描述】:
我正在为 ASP.Net 3.5 项目开发自定义 URL 重写器。这个重写器在功能上与大多数重写器没有什么不同,唯一的区别是友好的 URL 集合不是从 web.config 文件加载的——而是来自数据库。我天真地假设从头开始开发自定义重写器模块很容易,但现在我知道我把自己弄得一团糟。我离题了;让我们直接讨论技术问题。
在测试重写器时,我设置了一个友好的 URL,它将用户带到一个 Web 表单。正如任何人所期望的那样,来自此表单的回发不应更改友好地址,所以
http://my.web.site/app_root/FriendlyURL 总是被重写为http://my.web.site/app_root/not_friendly/form.aspx
浏览器首次加载 FriendlyURL 时一切正常。该页面出现并且功能齐全。但是,当表单被发送回服务器时,页面只是重新加载,但在服务器端,IsPostBack 为 false。就像按了 F5 一样,只是确实发生了 HTTP POST。
不出所料,当交互通过“不友好”的 URL 发生时,POST 操作会按预期触发回发。该证据表明HttpContext.RewritePath 以某种方式扰乱了页面生命周期,从而失去了回发操作的意义。有什么方向吗?谢谢。
【问题讨论】:
-
我认为 Humberto 是对的,但作为参考,我记得至少从 2.0 开始,在使用回发的页面上重写 URL 时,您还必须调整 Form.Action 值。
标签: c# asp.net url-rewriting