使用 Global.asax 重写 URL 和回发的另一种方法



我一直在 URL 重写和回发方面遇到问题。

编辑:当前使用 IIS 7 和 URL 重写模块。

基本上在回发之后,我的 URL 重写完全搞砸了,并向我的查询字符串添加了一些重复和不必要的字段值对。考虑到我正在解析代码中的 URL,这在引发回发后破坏了一个已经工作的页面。

从我所看到的情况来看,我之前的许多人都有同样的问题,几乎所有人都通过修改PageLoad上的表单操作来修复它,如下所示:

protected void Page_Load(object sender, EventArgs e)
    {
        form1.Action = Request.RawUrl;
        //Some other interesting things.
    }

重要提示:这起到了作用,它有效。

然而,尽管我的开发经验实际上不到一个月,但到目前为止,我一直在努力寻找更优雅的解决方案来解决我的问题。有人暗示我可能有一个更好的选择,涉及编辑 Global.asax,以便在更"全局"的层面上获得相同的结果。

在我看来,这应该使其整体更有效率,因为该技巧将在调用任何其他页面之前完成。

所以我的实际问题是:

如何通过编辑 Global.asax 文件而不是修改母版页加载事件上的表单操作来实现相同的目的?如果您有更优雅的解决方案,我将不胜感激。

考虑到这是我的第一个问题,我希望我已经足够有建设性了。

如果您无法更改重写方法,那么我可以想到两种可能比您更好的方法。

1( 创建一个基本页面并重写其中的操作 - 然后所有页面都应从新的基本页面继承。这样可以将代码保存在一个位置,而不必在每个页面中都编写代码。

2(从默认表单控件继承并停止它完全呈现动作属性,然后它将回发到重写的URL。然后将所有窗体实例替换为新控件。你可以看到我的意思是这篇文章的一半 http://msdn.microsoft.com/library/ms972974

编辑

3(Scott Gu发布了此问题的解决方案(在本文中 http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx(,该解决方案更加简洁,并且不涉及使用控制适配器更改任何代码。

还有一种方法可以通过 iis:

IIS URL 重写器和说明

我建议您像这样计算根(如果存在母版,则在母版页属性中

(:
Root = "http://" + Request.Url.Host + Request.ApplicationPath;
Root += (Root.EndsWith("/") ? "" : "/");

然后使用此指令将其粘贴到.aspx中:

<%=Root %>

最新更新