1

我正在寻找解决此问题的方法:

在运行我的自动网络测试时,我收到了一个失败的请求,这是我找到的响应: 请求失败:在测试上下文中找不到上下文参数'$HIDDEN1.__EVENTVALIDATION' 我弄清楚隐藏字段应该是从哪个请求中提取的(在之前的请求中),其中(Hidden1)我在之前的请求的提取规则中找到它,并且上下文参数名称的提取规则的值为1。

注意:我这次使用的是静态参数,HTTP 状态为 200。

在互联网上搜索后,我发现:http: //blogs.msdn.com/b/slumley/archive/2007/04/10/how-to-debug-a-web-test.aspx我没有找到我的解决方案在里面。

这个问题似乎很复杂,因为我保留了 2 天没有任何答案!如果有人想了解更多信息,我 24/24 在线 :) 非常感谢...

4

4 回答 4

3

我遇到了与您遇到的类似的问题(我看到这个问题很老了,但我想我会发布一个解决方案,因为这是谷歌针对这个问题的第一个结果)。

问题是 __EventValidation 标记是浏览器呈现的最后一件事,并且 VisualStudio 2008 Web 测试会在响应对象超过一定长度时截断它(我认为限制是 1.5MB)。

你有三个选择:

  1. 问问自己为什么您的页面大小超过 1.5MB,是否有必要,特别是如果这是一个公共网站?
  2. 将 Web 测试中的变量 ResponseBodyCaptureLimit 设置为一个大值,单位以字节为单位,因此像 9,000,000 (9MB) 这样的大小足以获取任何响应对象。请注意,这将对您的 Web 测试的内存使用产生影响,如果您将其用于任何负载/性能测试,那么这将意味着您的代理将需要更多内存。
  3. 重写 OnPreRender 方法以将 __EventValidation 标记从页面底部移动到页面顶部。

希望对遇到类似问题的人有所帮助。

~丹

于 2012-02-16T10:48:35.960 回答
1

我遇到了类似的问题,并且仍在解决它们。同时,此链接也可能会有所帮助:

http://blogs.msdn.com/b/slumley/archive/2007/04/10/how-to-debug-a-web-test.aspx

于 2012-10-04T16:29:54.127 回答
0

解决方案是将所有 EnableEventValidation 属性更改为 true(这是默认值)。

但在我看来最好的解决方案是使用visualstudio 2010的VSTS,它比2008的要好,两者之间确实发生了很大的演变。

于 2011-10-11T15:25:59.433 回答
0

如果有人遇到这个问题并选择覆盖 Render 方法,这里有一个示例代码。

        var stringWriter = new System.IO.StringWriter();
        var htmlWriter = new HtmlTextWriter(stringWriter);
        base.Render(htmlWriter);

        var html = stringWriter.ToString();

        const string validationELement = "<input type=\"hidden\" name=\"__EVENTVALIDATION\"";
        const string hiddenDivName = "<div class=\"aspNetHidden\">";

        // Find event validation element.
        var startIndex = html.IndexOf(validationELement);
        if (startIndex >= 0)
        {
            var endIndex = html.IndexOf("/>", startIndex) + 2;

            // Cut event validation element.
            var input = html.Substring(startIndex, endIndex - startIndex);
            html = html.Remove(startIndex, endIndex - startIndex);

            // Paste element into hidden div.
            var hiddenDivStartIndex = html.IndexOf(hiddenDivName);
            html = html.Insert(hiddenDivStartIndex + hiddenDivName.Length, input);
        }

        writer.Write(html);
于 2013-10-10T11:04:22.750 回答