我一直遇到网址重写和回发问题。
编辑:目前正在使用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加载事件的表单操作来实现相同目的?如果你有一个更优雅的解决方案,我将不胜感激你也包括它。
考虑到这是我的第一个问题,我希望我已经足够建设性了。
答案 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 %>