2012-11-24 17 views
2

使用:Visual Studio 2010中使用ASP.net 4.0URL重寫回傳與ViewStateMac啓用

我有一個網站,該網站將使用URL重寫,我想繼續回發的重寫URL。我已經閱讀了很多關於這個主題的主題,但我仍然無法弄清楚這是否可行。

例如:

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

被重寫爲:

http://localhost/member/forum.aspx 

該頁面包含若干其使用回傳(例如Telerik的radgrid控件與排序和分頁)對照。通常當回發發生時,瀏覽器被重定向到unrewritten網址 - 地址欄顯示/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中),都會出現此問題 - 但我不想禁用此功能。

實際上,我認爲我需要做的是告訴頁面/視圖狀態的授權,這是可以接受來自這個替代URL的輸入,但我找不到這樣做。我試過不同的URL重寫系統,看看是否有所作爲,我試着添加一個生成的machineKey - 兩者都沒有任何區別。有沒有辦法做到這一點?

總之我想:

  • 與回傳要去重寫URL重寫頁面
  • ViewStateMac啓用
  • 沒有視圖狀態驗證錯誤

我記得在早期版本的.NET使用.browser文件與FormRewriterControlAdapter,但這似乎沒有在.NET 4中有任何區別(我不記得它是否成功保留了UR L)。

回答

0

我發現了一個解決方案 - 事實證明,這個問題實際上是無關緊要的,並將其自身視爲ViewStateMac問題。

此前,我一直在將所有URL重定向到一個頁面,執行數據庫查找,然後使用Server.Transfer()將正確的頁面傳遞給瀏覽器。真正的問題是由於使用Server.Transfer()而導致的 - 在使用viewstate的時候,它似乎被Microsoft認爲是一個問題。

我已經做了調整,所以IIS執行數據庫查找,整個重寫,因此Server.Transfer()沒有使用 - 我原來的問題已得到解決。