.NET4.8 WPF中CoreWebView2缺失ServerCertificateErrorDetected事件
问题原因
你安装的Microsoft.Web.WebView2 1.0.1210.39版本未包含ServerCertificateErrorDetected事件,这是版本不匹配导致的API缺失。
根据官方版本变更记录,ServerCertificateErrorDetected首次加入稳定版通道是在1.0.1245.22版本,你当前使用的1.0.1210.39是更早的正式版本,不仅没有这个证书错误处理事件,其他你发现缺失的事件也基本都是后续版本迭代新增的API,旧版本元数据里没有相关定义,自然无法识别。
解决步骤
- 升级NuGet安装的WebView2包到1.0.1245.22以上的稳定版本,建议直接安装当前最新正式版,避免其他API缺失问题
- 代码文件顶部确保引入核心命名空间:
using Microsoft.Web.WebView2.Core;,部分Core层的事件和API在该命名空间下定义,未引入时VS智能提示不会显示对应成员 - 不要在WebView2初始化完成前绑定事件,必须等
CoreWebView2InitializationCompleted事件触发、确认CoreWebView2实例创建成功后再绑定证书错误处理事件,否则会触发运行时空引用异常
可直接复用的实现代码
// 页面/窗口构造函数或Loaded事件中添加初始化监听 public MainWindow() { InitializeComponent(); webView2.CoreWebView2InitializationCompleted += WebView2_CoreWebView2InitializationCompleted; // 你的其他初始化逻辑 webView2.Source = new Uri("https://your-test-site.com"); } private void WebView2_CoreWebView2InitializationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e) { if (!e.IsSuccess) return; // 初始化成功后再绑定证书错误事件 webView2.CoreWebView2.ServerCertificateErrorDetected += CoreWebView2_ServerCertificateErrorDetected; } private void CoreWebView2_ServerCertificateErrorDetected(object sender, Microsoft.Web.WebView2.Core.CoreWebView2ServerCertificateErrorDetectedEventArgs e) { // 按需编写证书校验逻辑,示例为忽略开发环境自签名证书错误 if (e.ErrorStatus is CoreWebView2WebErrorStatus.CertificateUntrustedRoot or CoreWebView2WebErrorStatus.CertificateCommonNameIsIncorrect or CoreWebView2WebErrorStatus.CertificateExpired) { // 注意:Accept方法必须在UI线程调用 e.Accept(); } }
额外排查点
如果升级包之后VS依然不识别该事件,先关闭VS,删除项目下的bin、obj缓存文件夹,重新打开项目后执行清理解决方案、重新生成操作即可,这类问题一般是NuGet缓存导致VS加载了旧版本的程序集元数据。
内容的提问来源于stack exchange,提问作者Imran Yaseen
相关产品推荐
相关产品推荐

