【问题标题】:An alternative approach to URL Rewriting and Postbacks with Global.asax?使用 Global.asax 的 URL 重写和回发的另一种方法?
【发布时间】:2012-05-09 13:40:51
【问题描述】:

我遇到了 URL 重写和回发问题。

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

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

据我所见,在我之前很多人都遇到过同样的问题,而且几乎所有人都通过修改 PageLoad 上的 Form Action 来解决这个问题,如下所示:

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

        //Some other interesting things.
    }

重要提示:成功了,它有效。

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

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

所以我的实际问题是:

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

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

【问题讨论】:

  • 您使用的是什么版本的 .NET?在 3.5 及更高版本中,您可以使用 MVC 的路由引擎,它更加优雅msdn.microsoft.com/en-us/magazine/dd347546.aspx
  • +1 用于路由。如果您完全关心您的网址,您似乎在解析它们后就这样做了,您需要路由。
  • 目前我正在使用 IIS 7 和 URL 重写。据我了解,路由是一个不同的概念,当然也不是一个简单的概念,尤其是对于初学者而言。到目前为止,我的简单 URL 重写工作完美无缺,我想一次学习一件事。我现在只是想以不同的方式实施回发修复。
  • 感谢@Kevin 和 bzlm 的输入。感谢您的建议,当我有空闲时间研究其他技术时,我会记住它。我为这篇文章添加了书签,我将查看您提到的 MVC 路由引擎。

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


【解决方案1】:

如果您无法更改重写方法,那么我可以考虑两种可能比您拥有的更好的方法。

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),它更加简洁,并且不涉及使用控制适配器更改任何代码。

【讨论】:

  • Scott Gu 的文章很棒!我会尝试他的方法或想法流中的其他东西-谢谢。从 1 开始,这就是 Master Page 所做的事情,但并没有真正提高效率。从 2 开始,这是一个聪明的解决方案,但考虑到我真的很新,我仍然不想弄乱诸如用自定义表单完全替换表单之类的内部事情 - 除非我对自己有信心做。
【解决方案2】:

还有另一种方式通过 iis:

IIS URL Rewriter and explained

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

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

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

<%=Root %>

【讨论】:

  • 你错过了我的 URL 已经被重写。它实际上是用 IIS 完成的,但是 Postback 后返回的 URL 被搞砸了——这是主要问题。
猜你喜欢
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 1970-01-01
  • 2014-06-23
相关资源
最近更新 更多