UWP拦截Webview请求并添加标头
我在UWP webview中导航到一个url,该页面在内部进行许多http调用。我正在通过WebResourceRequested事件拦截这些呼叫。我在头中添加了auth令牌,在这样做的时候,我得到了“一个被封送到不同线程的接口调用的应用程序”,试图在当前UI的调度程序中运行,但我仍然面临这个问题。请帮我做这个UWP拦截Webview请求并添加标头,uwp,winrt-xaml,uwp-xaml,Uwp,Winrt Xaml,Uwp Xaml,我在UWP webview中导航到一个url,该页面在内部进行许多http调用。我正在通过WebResourceRequested事件拦截这些呼叫。我在头中添加了auth令牌,在这样做的时候,我得到了“一个被封送到不同线程的接口调用的应用程序”,试图在当前UI的调度程序中运行,但我仍然面临这个问题。请帮我做这个 private async void Wb_WebResourceRequested(WebView sender, WebViewWebResourceRequestedEventA
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=wait client.SendRequestAsync(reqMsg.AsTask();
致:
var response=client.SendRequestAsync(reqMsg).AsTask().Result;
是否有可能像他们在.Result side effects@richard中提到的那样出现死锁同步方法确实冻结了UI,但如果必须使用WebResourceRequested
,则无法在事件回调中执行异步操作我们是否有其他替代方法。一般来说,WebResourceRequested
事件将侦听某些脚本或资源的加载。加载这些资源通常不需要修改请求头。但如果情况特殊,您可以考虑在