0

我正在尝试抓取我自己的 ASPX 页面,以便将其输入 HTML Agility Pack 解析器。我已经尝试了所有方法,并且在这种情况下我唯一可以使用字符串。

我正在使用以下代码将外部控件转换为字符串:

    static string ConvertControlToString(Control ctl)
    {
        string s = null;

        var sw = new StringWriter();
        using (var w = new HtmlTextWriter(sw))
        {
            ctl.RenderControl(w);
            s = sw.ToString();
        }
        return s;
    }

这个概念有效,除了一些恼人的故障。我有时会得到“控件必须在带有 runat=server 的表单内”。它似乎是由导致回发的控件触发的 - 按钮、更新面板等。

需要明确的是,我的页面是一种形式,所以这不是问题。

我需要尝试解决我的问题,无论是让 HTML 敏捷包解析器以另一种方式工作,还是将代码转换为没有错误的字符串。没关系 - 我只需要让事情正常进行。

4

1 回答 1

0

经过大量尝试错误后,我找到了一个可行的解决方案 - 它解决了问题。但是,它也引入了潜在的安全问题,因此您需要警惕它的使用方式。

只需将以下内容添加到页面:

  1. EnableEventValidation="假"
  2. 公共覆盖无效验证RenderingInServerForm(控制控制){}

以下是 Microsoft 关于禁用事件验证的说法:

此功能降低了未经授权或恶意回发请求和回调的风险。强烈建议您不要禁用事件验证。

但是,在不回发的页面上使用它是安全的。

于 2021-06-05T09:38:21.043 回答