使用:带有 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)。