UWP拦截WebviewPOST请求并获取内容
UWP intercept Webview POST request and get the content
使用 UWP/XAML,我试图通过处理 WebResourceRequested 拦截 WebView 的 POST(表单和文件上传)请求并获取要保存的内容,但 Content keep 显示 '' 在本地 Window 中,无法访问。我怎样才能访问内容?
private void WebView_WebResourceRequested(WebView sender, WebViewWebResourceRequestedEventArgs args)
{
if (request.Method.Method == "POST")
{
HttpStreamContent content = (HttpStreamContent) args.request.Content;
var contentBuffer = content.ReadAsBufferAsync().GetResults();
byte[] buffer = contentBuffer.ToArray();
}
}
非常感谢。
UWP intercept Webview POST request and get the content
这是 WebView1 中的已知问题。
目前,我们提供了一种解决方法,即使用 ReadAsInputStreamAsync
获取请求内容并使用固定长度加载缓冲区。因为它是非搜索流。我在我们现有的简单重现样本上测试成功。
private async void MyWebView_WebResourceRequested(WebView sender, WebViewWebResourceRequestedEventArgs args)
{
if (args.Request.Method.Method == "POST")
{
if (args.Request.Content != null)
{
var bodyStream = await args.Request.Content.ReadAsInputStreamAsync();
var buffer = new Windows.Storage.Streams.Buffer(4096);
await bodyStream.ReadAsync(buffer, 4096, Windows.Storage.Streams.InputStreamOptions.None);
var reader = Windows.Storage.Streams.DataReader.FromBuffer(buffer);
var len = reader.UnconsumedBufferLength;
var body = reader.ReadString(len);
Debug.WriteLine($"Body from POST request: {body}");
}
}
}
当然,只要我们为 post 数据提供足够大的缓冲区,此代码就可以正常工作。对于此示例,这里 4096 字节的缓冲区足以获取整个数据 posted。
使用 UWP/XAML,我试图通过处理 WebResourceRequested 拦截 WebView 的 POST(表单和文件上传)请求并获取要保存的内容,但 Content keep 显示 '
private void WebView_WebResourceRequested(WebView sender, WebViewWebResourceRequestedEventArgs args)
{
if (request.Method.Method == "POST")
{
HttpStreamContent content = (HttpStreamContent) args.request.Content;
var contentBuffer = content.ReadAsBufferAsync().GetResults();
byte[] buffer = contentBuffer.ToArray();
}
}
非常感谢。
UWP intercept Webview POST request and get the content
这是 WebView1 中的已知问题。
目前,我们提供了一种解决方法,即使用 ReadAsInputStreamAsync
获取请求内容并使用固定长度加载缓冲区。因为它是非搜索流。我在我们现有的简单重现样本上测试成功。
private async void MyWebView_WebResourceRequested(WebView sender, WebViewWebResourceRequestedEventArgs args)
{
if (args.Request.Method.Method == "POST")
{
if (args.Request.Content != null)
{
var bodyStream = await args.Request.Content.ReadAsInputStreamAsync();
var buffer = new Windows.Storage.Streams.Buffer(4096);
await bodyStream.ReadAsync(buffer, 4096, Windows.Storage.Streams.InputStreamOptions.None);
var reader = Windows.Storage.Streams.DataReader.FromBuffer(buffer);
var len = reader.UnconsumedBufferLength;
var body = reader.ReadString(len);
Debug.WriteLine($"Body from POST request: {body}");
}
}
}
当然,只要我们为 post 数据提供足够大的缓冲区,此代码就可以正常工作。对于此示例,这里 4096 字节的缓冲区足以获取整个数据 posted。