【问题标题】:URL Rewriting Postback with ViewStateMac Enabled启用 ViewStateMac 的 URL 重写回发
【发布时间】:2012-11-24 15:02:03
【问题描述】:

使用:Visual Studio 2010 和 ASP.net 4.0

我有一个使用 URL 重写的网站,我想将重写的 URL 保留在 Postback 上。我已经阅读了很多关于这个主题的主题,但我仍然无法弄清楚这是否可行。

例如:

http://localhost/ActualPage.aspx?PageID=4

改写为:

http://localhost/member/forum.aspx

该页面包含许多使用回发的控件(例如带有排序和分页的 Telerik RadGrid)。通常,当回发发生时,浏览器会重定向到未重写的 url - 地址栏显示 /ActualPage.aspx?PageID=4 等。在这种情况下一切正常。

但是我想在回发后保留重写后的 URL,所以我编写了代码以将 Form.Action 属性更改为重写后的 URL,如下所示:

Page.Form.Action = "/member/forum.aspx"

现在页面正确地保留了地址栏中的 URL,但在回发发生时会抛出 "Validation of viewstate MAC failed" error - 我也希望它是因为视图状态来自不同的 URL。

奇怪的是,即使 enableViewStateMac 设置为 false(在页面中或 web.config 中),也会出现此问题 - 但无论如何我都不想禁用它。

实际上,我认为我需要做的是告诉页面/视图状态 mac 授权可以接受来自此替代 URL 的输入,但无论如何我都找不到这样做。我尝试了不同的 URL 重写系统来查看是否有所不同,并且我尝试添加了一个生成的 machineKey - 这两者都没有任何区别。有没有办法做到这一点?

总之我想要:

  • 重写的页面,回发到重写的 URL
  • ViewStateMac 已启用
  • 没有视图状态验证错误

我记得在早期版本的 .NET 中使用带有 FormRewriterControlAdapter.browser 文件,但这在 .NET 4 中似乎没有任何区别(我不记得它是否成功保留了 URL)。

【问题讨论】:

    标签: asp.net .net-4.0 url-rewriting postback viewstate


    【解决方案1】:

    我找到了解决方案 - 事实证明这个问题实际上是不相关的,并且将其自身隐藏为 ViewStateMac 问题。

    以前我一直将所有 URL 重定向到一个页面,进行数据库查找,然后使用 Server.Transfer() 将正确的页面传递给浏览器。真正的问题是由使用 Server.Transfer() 引起的 - 在使用视图状态时,Microsoft 似乎认为这是一个问题。

    我进行了调整,以便 IIS 执行数据库查找、整个重写,因此不使用 Server.Transfer() - 我原来的问题已经解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-01
      • 2018-04-17
      • 2014-09-09
      • 2011-02-23
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多