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。