繁体   English   中英

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

[英]An alternative approach to URL Rewriting and Postbacks with Global.asax?

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

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

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

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

protected void Page_Load(object sender, EventArgs e)
    {
        form1.Action = Request.RawUrl;

        //Some other interesting things.
    }

重要提示:这样做很有效 ,但它确实有效。

然而,虽然我的开发经验实际上还不到一个月,但到目前为止,我一直在努力为我的问题寻找更优雅的解决方案。 我一直暗示可能有一个更好的选择,包括编辑Global.asax ,以便在更“全局”的水平上获得相同的结果。

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

所以我的实际问题是:

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

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

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

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 )这更干净,不涉及使用控制适配器更改任何代码。

通过iis还有一种方法:

IIS URL重写器并进行了解释

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

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

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

<%=Root %>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM