0

在运行我的 Visual Studio Web 性能测试之一时,我注意到尝试解码视图状态时出现间歇性异常:

消息: Base-64 字符数组的长度无效。

调用堆栈:在 System.Convert.FromBase64String(String s) 在 System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) 在 System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState) 在System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState) 在 System.Web.UI.HiddenFieldPageStatePersister.Load()

这只发生在一个地点的一次测试中。做一些研究,我注意到客户端发送的视图状态和服务器接收的视图状态的不同之处仅在于所有加号(+)字符都变成了空格()。

这是什么原因造成的?

4

1 回答 1

2

ASP.NET 期望_VIEWSTATE隐藏的表单字段在到达服务器之前进行 URL 编码。当 ASP.NET 接收到请求时,它_VIEWSTATE会对参数进行 URL 解码,众所周知,这会将加号变成空格。

在 webtest 中的隐藏表单字段上将URL 编码属性设置为true会导致错误消失。_VIEWSTATE

于 2012-03-28T14:04:14.190 回答