如何在 WebView2 中获取服务器响应代码
How do I get server response code in 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
将可用。
使用方法:
- Install/update
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
如果header不存在会抛出异常,所以先检查一下
我正在尝试使用 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
将可用。
使用方法:
- Install/update
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
如果header不存在会抛出异常,所以先检查一下