You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#结合HTML Agility Pack做网页抓取时如何不使用try-catch处理UriFormatException

C#配合HTML Agility Pack的用户输入URL合法性校验方案

以下方案完全兼容HTML Agility Pack依赖,无需修改原有抓取逻辑,仅需在调用Load方法前插入前置校验步骤即可实现提前拦截非法URL的需求:

  • 核心校验逻辑使用.NET内置的Uri.TryCreate方法实现,无需额外引入依赖,性能优于异常捕获机制:
string userInputUrl = 用户输入的原始内容;
Uri validUri = null;
// 仅接受http/https协议的绝对URI,符合网页抓取的业务场景
if (!Uri.TryCreate(userInputUrl, UriKind.Absolute, out validUri) 
    || (validUri.Scheme != Uri.UriSchemeHttp && validUri.Scheme != Uri.UriSchemeHttps))
{
    // 此处执行你的兜底逻辑,比如弹出格式错误提示
    Console.WriteLine("请输入正确的以http/https开头的站点地址");
    return;
}
// 校验通过后再调用HTML Agility Pack的加载方法,不会触发UriFormatException异常
var document = mywebsite.Load(validUri.AbsoluteUri);
  • 可选体验优化:如果需要兼容用户漏写http前缀的场景,可以增加自动补全后的二次校验逻辑:
string userInputUrl = 用户输入的原始内容.Trim();
Uri validUri = null;
// 先校验原始输入
if (!Uri.TryCreate(userInputUrl, UriKind.Absolute, out validUri) 
    || (validUri.Scheme != Uri.UriSchemeHttp && validUri.Scheme != Uri.UriSchemeHttps))
{
    // 补全https前缀后二次校验
    if (!Uri.TryCreate($"https://{userInputUrl}", UriKind.Absolute, out validUri) 
        || (validUri.Scheme != Uri.UriSchemeHttp && validUri.Scheme != Uri.UriSchemeHttps))
    {
        Console.WriteLine("请输入正确的站点地址");
        return;
    }
}
var document = mywebsite.Load(validUri.AbsoluteUri);
  • 可扩展的业务校验方向:如果有特殊业务需求,可在校验流程中额外增加域名规则校验、禁止内网/本地回环地址校验、高危站点黑名单校验等逻辑,进一步提升输入合法性。

内容的提问来源于stack exchange,提问作者Virophage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:24:02