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

时间:2012-05-09 13:40:51

标签: c# asp.net url-rewriting postback

我一直遇到网址重写和回发问题。

编辑:目前正在使用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文件而不是修改MasterPage加载事件的表单操作来实现相同目的?如果你有一个更优雅的解决方案,我将不胜感激你也包括它。

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

2 个答案:

答案 0 :(得分:2)

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

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

2)从默认表单控件继承并停止它完全呈现action属性,然后它将回发到重写的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中),它更清晰,不涉及使用控制适配器更改任何代码。

答案 1 :(得分:0)

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

IIS URL Rewriter and explained

我建议你计算root(在master页面属性中,如果存在master),如下所示:

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

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

<%=Root %>