首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在WebView2中获得服务器响应代码

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

Stack Overflow用户
提问于 2020-12-22 03:50:08
回答 2查看 2.9K关注 0票数 2

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

代码语言:javascript
运行
复制
    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");
        }
    }

如何获得响应代码?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-23 18:49:50

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

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

使用它:

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

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

代码语言:javascript
运行
复制
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);
            }
        }
    }
}

注意,如果标头不存在,e.Response.Headers.GetHeader将抛出异常,所以首先检查它。

票数 3
EN

Stack Overflow用户

发布于 2022-08-10 04:30:27

看起来,昨天发布的WV2 SDK (1.0.1293.44)增加了一个新的接口,它将给我们提供我们所需要的东西:

https://learn.microsoft.com/en-us/microsoft-edge/webview2/reference/win32/icorewebview2navigationcompletedeventargs2?view=webview2-1.0.1293.44

代码语言:javascript
运行
复制
interface ICoreWebView2NavigationCompletedEventArgs2 : 
public ICoreWebView2NavigationCompletedEventArgs

get_HttpStatusCode  The HTTP status code of the navigation if it involved an HTTP request.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65403022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档