2

使用:带有 ASP.net 4.0 的 Visual Studio 2010

我有一个使用 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 中使用.browser文件,FormRewriterControlAdapter但这在 .NET 4 中似乎没有任何区别(我不记得它是否成功保留了 URL)。

4

1 回答 1

0

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

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

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

于 2012-11-25T00:48:26.367 回答