【问题标题】:set Webview2 header or cookie设置 Webview2 标头或 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

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

【问题讨论】:

    标签: c# .net wpf winforms webview2


    【解决方案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");
              }
      

      【讨论】:

      • 这不起作用。存在构建错误。我之前也试过这个。
      猜你喜欢
      • 1970-01-01
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 2020-08-16
      • 2017-07-08
      • 2020-09-28
      • 2013-07-24
      相关资源
      最近更新 更多