运行我的一个Visual Studio Web性能测试时,我在尝试解码viewstate时发现间歇性异常:
消息: Base-64字符数组的长度无效。
在System.Web.UI.Object.UI.ObjectStateFormatter.System.Web上的System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)的System.Convert.FromBase64String(String s)处调用Stack:。 System.Web.UI.HiddenFieldPageStatePersister.Load()
中System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter,String serializedState)的UI.IStateFormatter.Deserialize(String serializedState)这只发生在一个地点的一次测试中。做一些研究我注意到客户端发送的视图状态和服务器收到的视图状态的区别仅在于所有加号(+
)字符都变为空格()。
造成这种情况的原因是什么?
答案 0 :(得分:2)
ASP.NET期望_VIEWSTATE
隐藏表单字段在到达服务器之前进行URL编码。当ASP.NET收到请求时,它对_VIEWSTATE
参数进行URL解码,已知该参数可以将参数转换为空格。
在webtest的_VIEWSTATE
隐藏表单字段中将网址编码属性设置为 true 会导致错误消失。