这似乎是其他类似问题的重复,但它们是旧线程,并非特定于Windows UWP应用。
我无法在WebView中设置自定义标头,因此WebView中已加载的URL可以为我工作。
我见过很多论坛都提供类似的解决方案,例如将HttpClient / WebRequest与标头一起使用,但是这种方法不起作用,因为我使用的是用于重定向的网址使用Javascript,在重定向之前,它需要少量自定义标头才能正确加载。
而且WebView.NavigateWithHttpRequestMessage不太适合,因为它将回发,并且我需要每个请求的标头,包括Web View中的javascript重定向URL 。
我可以使用Renderers在Xamarin.Droid项目中设置自定义标头,但找不到UWP的任何解决方案Windows.UI.Xaml.Controls.WebView
。
在通用Windows 10平台上,该WebView.NavigateWithHttpRequestMessage
方法是正确的方法。
一种。我需要每个请求的标头,包括Web视图中的javascript重定向的URL。
b。这没有解决我的问题,因为设置标头后
OnWebViewNavigationStarting
多次调用了该方法,并且应用程序自动崩溃,并出现System.StackOverflowException错误
这是因为如果我们在事件中进行导航,则将发生无限导航NavigationStarting
。我们应该通过将属性设置为true来取消此事件的处理程序中的导航。WebViewNavigationStartingEventArgs.Cancel
我们需要NavigationStarting
仔细添加/删除事件处理程序。
代码示例:
private void NavigateWithHeader(Uri uri)
{
var requestMsg = new Windows.Web.Http.HttpRequestMessage(HttpMethod.Get, uri);
requestMsg.Headers.Add("User-Name", "Franklin Chen");
wb.NavigateWithHttpRequestMessage(requestMsg);
wb.NavigationStarting += Wb_NavigationStarting;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
NavigateWithHeader(new Uri("http://openszone.com/RedirectPage.html"));
}
private void Wb_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args)
{
wb.NavigationStarting -= Wb_NavigationStarting;
args.Cancel = true;//cancel navigation in a handler for this event by setting the WebViewNavigationStartingEventArgs.Cancel property to true
NavigateWithHeader(args.Uri);
}
屏幕截图是Fiddler中的日志信息,第二个红色矩形中的请求记录包括自定义标头:
我在这里共享了我的UWP示例,您可以轻松地将其集成到Xamarin UWP应用中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句