c# - 如何在 WebView2 中获取服务器响应代码
问题描述
我正在尝试使用 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");
}
}
如何获取响应码?
解决方案
我认为e.Response
将始终是null
因为在WebResourceRequested
发送请求之前触发了事件。您应该在事件处理程序中创建响应。那不是你想要的。
所以你会怎么做?好吧,新的预发布版本WebView2
可能有,你想要什么 - 一个WebResourceResponseReceived
事件。当您收到来自服务器的响应并且此处e.Response
将可用时,这会触发。
要使用它:
- 安装/更新
Microsoft.WebView2
预发布版本(最新)。 - 安装 Microsoft Edge 的Canary版本。
- 卸载WebView2 运行时 - 否则仍将使用它。
现在您可以使用如下代码(注意新的事件名称):
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
如果标头不存在,则会引发异常,因此请先检查。
推荐阅读
- javascript - 如何处理`UnhandledPromiseRejectionWarning`
- mongodb - go get mongo-go-driver 在 Dockerfile 中崩溃
- python - How to make `format` function in python 2 to work with `unicode` type objects with UTF-8 encoding?
- vue.js - 如何计算vuejs中的数字数组
- inno-setup - 在 Inno Setup 中显示消息后将焦点设置在编辑框上
- php - 本地主机抛出禁止错误,一些目录只是空白
- vuejs2 - Vue递归渲染tr数组
- android - 从活动结果返回时如何避免黑屏?
- javascript - 无法在屏幕焦点上重新渲染功能
- c# - 你可以从另一个类中获取一个类中的方法中的变量值吗?