日期:2014-05-19  浏览次数:20498 次

Base-64 字符串中的无效字符,错误!期待完美的解答
我做的网站,C#+SQLSERVER2000   .net版本:1.1
本机为WINXP,服务器为WIN2003,.net版本一致
下列现象本机调试从未出现过,但上传到服务器上,外网查看经常出错。

现象一、翻页时,翻着翻着就遇到类似“视图状态无效。。。。。”
现象二、还是翻页,现在改成“Base-64   字符串中的无效字符”了
现象三、如果某页上面有按钮,单击事件上面有重定向URL时,也会经常出现现象二。
异常详细信息:   System.FormatException:   Base-64   字符串中的无效字符。

[FormatException:   Base-64   字符串中的无效字符。]
      System.Convert.FromBase64String(String   s)   +0
      System.Web.UI.LosFormatter.Deserialize(String   input)   +25
      System.Web.UI.Page.LoadPageStateFromPersistenceMedium()   +101

[HttpException   (0x80004005):   Invalid_Viewstate
Client   IP:   192.168.0.253
Port:   4956
User-Agent:   Mozilla/4.0   (compatible;   MSIE   6.0;   Windows   NT   5.1;   SV1;   .NET   CLR   1.1.4322)
ViewState:   一大串。。。。。

Http-Referer:   http://www.tsjjw.cn/searchT.aspx
Path:   /searchT.aspx.]
      System.Web.UI.Page.LoadPageStateFromPersistenceMedium()   +447
      System.Web.UI.Page.LoadPageViewState()   +18
      System.Web.UI.Page.ProcessRequestMain()   +447

尝试过以下改动,但都不行
1、 <%@   Page   language= "c# "   .....   "   enableViewStateMac= "False "%>
2、Machine.cfg中的配置节: "   enableViewStateMac= "False "
3、web.config中的配置节:         <globalization  
                        requestEncoding= "gb2312 "  
                        responseEncoding= "gb2312 "
      />


大家可以去http://www.tsjjw.cn/searchT.aspx,试一下

期待中.............


------解决方案--------------------
看了一下,出错前页面上的viewstate隐藏域有5586字节,而回传到服务端的(也就是错误提示中的)只有5584字节,页面的viewstate多了两个字符“%2”,这“%”个字符不是base64 编码, 也就是说,页面上的viewstate已经不正确了,这样传回去,肯定无法反序列化的

至于为什么会这样,还不清楚