我正在尝试使用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");
}
}
如何获得响应代码?
发布于 2020-12-23 18:49:50
我认为e.Response
永远是null
,因为WebResourceRequested
事件是在发送请求之前触发的。你应该在晚些时候做出回应。这不是你想要的。
那么你是做什么的?好吧,新的预发布版版本的WebView2
可能有,你想要的-一个WebResourceResponseReceived
事件。当您收到来自服务器的响应时会触发这一点,在这里,e.Response
是可用的。
使用它:
Microsoft.WebView2
预发布版 (latest).现在您可以使用如下代码(注意新的事件名称):
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
将抛出异常,所以首先检查它。
发布于 2022-08-10 04:30:27
看起来,昨天发布的WV2 SDK (1.0.1293.44)增加了一个新的接口,它将给我们提供我们所需要的东西:
interface ICoreWebView2NavigationCompletedEventArgs2 :
public ICoreWebView2NavigationCompletedEventArgs
get_HttpStatusCode The HTTP status code of the navigation if it involved an HTTP request.
https://stackoverflow.com/questions/65403022
复制相似问题