UWP 拦截 Webview 请求并添加 header
UWP Intercept Webview request and add header
我正在导航到 UWP webview 中的 url,该页面在内部进行了很多 http 调用。我正在通过 WebResourceRequested 事件拦截这些调用。我在 header 中添加身份验证令牌,这样做时我得到“应用程序调用了一个为不同线程编组的接口 ”,试图 运行 在当前 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)
{
}
//});
}
根据测试,设置args.Response
时不能处于异步环境。
请更改
var response = await client.SendRequestAsync(reqMsg).AsTask();
至:
var response = client.SendRequestAsync(reqMsg).AsTask().Result;
我正在导航到 UWP webview 中的 url,该页面在内部进行了很多 http 调用。我正在通过 WebResourceRequested 事件拦截这些调用。我在 header 中添加身份验证令牌,这样做时我得到“应用程序调用了一个为不同线程编组的接口 ”,试图 运行 在当前 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)
{
}
//});
}
根据测试,设置args.Response
时不能处于异步环境。
请更改
var response = await client.SendRequestAsync(reqMsg).AsTask();
至:
var response = client.SendRequestAsync(reqMsg).AsTask().Result;