如何在WebView2中获得服务器响应代码

内容来源于 Stack Overflow,遵循 CC BY-SA 4.0 许可协议进行翻译与使用。IT领域专用引擎提供翻译支持

腾讯云小微IT领域专用引擎提供翻译支持

原文
Stack Overflow用户 提问于2020-12-22

我正在尝试使用WebView2并获取服务器响应代码。但是,由于某些原因,CoreWebView2WebResourceRequestedEventArgs.Response始终为空:

    webView.CoreWebView2Ready += CoreWebView2Ready;        
    private void CoreWebView2Ready(object sender, EventArgs e)
        webView.CoreWebView2.AddWebResourceRequestedFilter("*", CoreWebView2WebResourceContext.All);
        webView.CoreWebView2.WebResourceRequested += WebResourceRequested;
    private void WebResourceRequested(object sender, CoreWebView2WebResourceRequestedEventArgs e)
        /* e.Response is always null for some reason */
        if (e.Response != null)
            int statusCode = e.Response.StatusCode;
            string header = e.Response.Headers.GetHeader("myheader");
    }

如何获得响应代码?

浏览 45 关注 0 得票数 2
  • 得票数为Stack Overflow原文数据
原文
回答于2020-12-23
得票数 3

我认为 e.Response 永远是 null ,因为 WebResourceRequested 事件是在发送请求之前触发的。你应该在晚些时候做出回应。这不是你想要的。

那么你是做什么的?好吧,新的 预发布版 版本的 WebView2 可能有,你想要的-一个 WebResourceResponseReceived 事件。当您收到来自服务器的响应时会触发这一点,在这里, e.Response 是可用的。

使用它:

  1. Install/update Microsoft.WebView2 预发布版 (latest).
  2. Install,微软Edge.
  3. Uninstall WebView2运行时的 Canary 构建,否则仍将被使用.

现在您可以使用如下代码(注意新的事件名称):

using Microsoft.Web.WebView2.Core;
using System.Windows.Forms;
namespace WindowsFormsApp2
    public partial class Form1 : Form
        public Form1()
            InitializeComponent();
        private void WebView21_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e)
            webView21.CoreWebView2.WebResourceResponseReceived += CoreWebView2_WebResourceResponseReceived;
        private void CoreWebView2_WebResourceResponseReceived(object sender, CoreWebView2WebResourceResponseReceivedEventArgs e)
            if (e.Response != null && e.Response.Headers.Contains("date"))
                int statusCode = e.Response.StatusCode;
                string header = e.Response.Headers.GetHeader("date");
                MessageBox.Show(header);