【问题标题】:UWP Intercept Webview request and add headerUWP 拦截 Webview 请求并添加标头
【发布时间】:2020-06-23 05:03:38
【问题描述】:

我正在导航到 UWP webview 中的一个 url,该页面在内部进行了许多 http 调用。我正在通过 WebResourceRequested 事件拦截这些调用。我在标头中添加了身份验证令牌,这样做时我得到“应用程序调用了一个为不同线程编组的接口”,试图在当前 UI 的调度程序中运行,但我仍然面临这个问题。请帮我解决这个问题。

 private async void Wb_WebResourceRequested(WebView sender, WebViewWebResourceRequestedEventArgs args)
    {
        //_ = this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
        //{

            try
            {
                string host = args.Request.RequestUri.Host;
                string uri = args.Request.RequestUri.AbsoluteUri;

                    try
                    {
                        var reqMsg = args.Request;
                        reqMsg.Headers.Authorization = new Windows.Web.Http.Headers.HttpCredentialsHeaderValue("Bearer", _AuthToken);
                        var response = await client.SendRequestAsync(reqMsg).AsTask();
                        args.Response = response;

                        Debug.WriteLine(uri + " res code : " + response.StatusCode);
                    }
                    catch (Exception e)
                    {
                        Debug.WriteLine(uri + " error msg : " + e.Message);
                    }

            }
            catch (Exception e)
            {
            }
        //});

    }

【问题讨论】:

    标签: uwp winrt-xaml uwp-xaml


    【解决方案1】:

    根据测试,设置args.Response时不能处于异步环境。

    请更改

    var response = await client.SendRequestAsync(reqMsg).AsTask();
    

    到:

    var response = client.SendRequestAsync(reqMsg).AsTask().Result;
    

    【讨论】:

    • 它没有死锁的可能性,正如他们在.Result副作用@Richard中提到的那样
    • 同步方法确实会冻结UI,但如果一定要使用WebResourceRequested,则不能在事件回调中进行异步操作
    • 我们还有其他替代方法吗?
    • 一般来说WebResourceRequested事件会监听一些脚本或资源的加载。这些资源的加载通常不需要修改请求头。但如果情况特殊,可以考虑在Javascript中的资源请求中添加请求头,而不是通过WebView拦截请求。如果您在导航到页面时使用请求标头,请使用 WebView.NavigateWithHttpRequestMessage
    猜你喜欢
    • 1970-01-01
    • 2021-03-03
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    相关资源
    最近更新 更多