UWP拦截Webview请求并添加标头

时间:2020-03-11 08:48:52

标签: uwp winrt-xaml uwp-xaml

我正在导航到UWP Web视图中的URL,该页面在内部进行了许多HTTP调用。我正在通过 WebResourceRequested 事件拦截这些呼叫。我在标头中添加了auth令牌,这样做时,我得到“ 应用程序称为接口,该接口已编组为不同的线程”,试图在当前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)
            {
            }
        //});

    }

2 个答案:

答案 0 :(得分:1)

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

请更改

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

收件人:

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

答案 1 :(得分:0)

如果您有更多来自网络视图的拨出电话,建议的解决方案可能会冻结UI