WPF使用WebView2实现带Cookie数据访问链接
WPF如何使用WebView2浏览器(以Microsoft Edge为内核)实现访问链接时带Cookie数据呢?
关于WebView2的基础知识这里不展开讲述,各位可以自行查阅相关资料了解一下。接下来直奔主题,
实现的整体流程:
CoreWebView2对象初始化→设置Cookie→访问链接。
这里核心的是需要使用到WebView2的CoreWebView2对象。关于CoreWebView2的官方简述:
摘要:访问底层Microsoft.Web.WebView2.Core.CoreWebView2的完整功能 COM API。在初始化完成之前返回null。请参见Microsoft.Web.WebView2.Wpf.WebView2初始化概述的类文档。

避坑指南
CoreWebView2的初始化与其他普通类的初始化大不相同,其他普通类常见的初始化方式为:ClassA a=new ClassA();
但它的初始化需做2项工作:
- 调用WebView2的EnsureCoreWebView2Async(CoreWebView2Environment environment);方法,代码示例如后文;
- 使用NuGet程序包管理下载安装运行库WebView2.Runtime.X64或者WebView2.Runtime.X86(使用X64还是X86运行库请结合自己的项目情况),并将运行库的WebView2文件夹拷贝到程序运行目录(与运行程序位于同级目录)。

运行库中的WebView2文件夹位置(文件夹相对位置:{项目文件夹}\packages\WebView2.Runtime.X64.114.0.1823.79\contentFiles\any\any\WebView2),如下图。
将运行库的WebView2文件夹拷贝到程序运行目录(与运行程序位于同级目录),如下图。

初始化完成之后,再进行Cookie创建和设置,最后访问目标链接地址。完整代码示例如下(其中webView为WebView2的实例化对象):
private async void LinkWindow_Loaded(object sender, RoutedEventArgs e)
{
try
{
await webView.EnsureCoreWebView2Async(await CoreWebView2Environment.CreateAsync(
System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
"WebView2")));
string url = "http://192.168.10.10:8080";
string cookieUrl = "http://192.168.10.10:8080";
string cookieDomain = "192.168.10.10";
string cookieName = "MyCookie";
string cookieValue= "this is cookie value";
if (webView.CoreWebView2 == null)
{
Log.Error("webView.CoreWebView2对象为null");
return;
}
var cookieObj = webView.CoreWebView2.CookieManager.CreateCookie(cookieName, cookieValue, cookieDomain, "/");
webView.CoreWebView2.CookieManager.AddOrUpdateCookie(cookieObj);
Log.Debug($"即将打开链接:{url}");
webView.CoreWebView2.Navigate(url);
}
catch (Exception ex)
{
Log.Error(ex);
}
}
以上就是整个流程了,感谢关注!
好记性不如烂笔头,每一次记录都是一次成长~