启用ViewStateMac的URL重写回发

时间:2012-11-24 15:02:04

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

使用:Visual Studio 2010 with ASP.net 4.0

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

例如:

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

重写为:

http://localhost/member/forum.aspx

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

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

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

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

奇怪的是,即使enableViewStateMac设置为false(在页面中或在web.config中),也会出现此问题 - 但我仍然不想禁用此功能。

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

简而言之,我想:

  • 使用回发转到重写网址的重写页面
  • 启用ViewStateMac
  • 没有视图状态验证错误

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

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案 - 事实证明问题实际上是无关的,并且将自己视为ViewStateMac问题。

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

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

相关问题