设置 Webview2 标头或 cookie

Posted

技术标签:

【中文标题】设置 Webview2 标头或 cookie【英文标题】:set Webview2 header or cookie 【发布时间】:2021-10-01 10:20:00 【问题描述】:

我想为 Webview2 发出的所有请求设置自定义标头。请帮忙。基本上我想在 webview 本身中加载网站,所以我需要收到所有请求的标题。

MainWindow.xaml.cs

using Microsoft.Web.WebView2.Core;
using System;
using System.Windows;

namespace O2C

    public partial class MainWindow : Window
    

        public MainWindow()
        
            InitializeComponent();
        

        private void webView_CoreWebView2InitializationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e)
        
            webView.CoreWebView2.Settings.UserAgent = "O2C-Web";
            webView.CoreWebView2.Settings.AreDefaultContextMenusEnabled = false;
            webView.CoreWebView2.Settings.AreBrowserAcceleratorKeysEnabled = false;
        

        private void WebView_NavigationStarting(object sender, CoreWebView2NavigationStartingEventArgs e)
        
            e.RequestHeaders.SetHeader("X-Authorization", "My Auth");
        
    

e.RequestHeaders.SetHeader("X-Authorization", "My Auth");

我找到了可以满足要求的正确事件,但我不知道如何从 xaml 文件或 .cs 文件中调用该事件。 以下文档说此事件将满足要求。

https://docs.microsoft.com/en-us/dotnet/api/microsoft.web.webview2.core.corewebview2.webresourcerequested?view=webview2-dotnet-1.0.864.35

但是如何挂钩该事件以及我不知道的地方。

【问题讨论】:

【参考方案1】:

我看了很多地方后解决了。

如果您想要WebResourceRequested 事件,那么您必须注册Filter,它将拦截对所有资源的所有请求。然后它就会工作或调用。

我在这里发布整个代码:

private void webView_CoreWebView2InitializationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e)

      //Following line is MUST if you want to use WebResourceRequested Event
      webView.CoreWebView2.AddWebResourceRequestedFilter("*", CoreWebView2WebResourceContext.All);
      webView.CoreWebView2.Settings.UserAgent = "MY-AGENT";
      webView.CoreWebView2.Settings.AreDefaultContextMenusEnabled = false;
      webView.CoreWebView2.Settings.AreBrowserAcceleratorKeysEnabled = false;
      webView.CoreWebView2.WebResourceRequested += CoreWebView2_WebResourceRequested;


private void CoreWebView2_WebResourceRequested(object sender, CoreWebView2WebResourceRequestedEventArgs e)

      e.Request.Headers.SetHeader("X-Authorization", "My Auth");

感谢大家的支持和想法。希望这个解决方案有所帮助。

【讨论】:

【参考方案2】:

该事件 WebResourceRequested 位于 CoreWebView2 类上,您可以在 WebView2.CoreWebView2InitializationCompleted 事件触发后找到您的 CoreWebView2 作为 WebView2 类上的属性。

        private void webView_CoreWebView2InitializationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e)
        
            if (e.IsSuccess)
            
                webView.CoreWebView2.Settings.UserAgent = "O2C-Web";
                webView.CoreWebView2.Settings.AreDefaultContextMenusEnabled = false;
                webView.CoreWebView2.Settings.AreBrowserAcceleratorKeysEnabled = false;

                webView.CoreWebView2.WebResourceRequested += CoreWebView2_WebResourceRequested;
            
        

        private void CoreWebView2_WebResourceRequested(object sender, CoreWebView2WebResourceRequestedEventArgs e)
        
            e.Request.Headers.SetHeader("X-Authorization", "My Auth");
        

【讨论】:

这不起作用。存在构建错误。我之前也试过这个。

以上是关于设置 Webview2 标头或 cookie的主要内容,如果未能解决你的问题,请参考以下文章

WebView2:在 C# 中从 Javascript 代码设置对象属性

通过 WebView2 将对象从 .NET 设置为 JavaScript 代码

在 WebResourceRequested 事件中为 WebView2 设置 cookie

为 WebView2 设置缓存目录

将 Webview2 Source 直接设置为二进制流

查看pdf时隐藏或修改Webview2的工具栏