如何在导航时在Xamarin WebView源中传递查询字符串

如何在导航时在Xamarin WebView源中传递查询字符串,xamarin,webview,Xamarin,Webview,我需要在导航()时将查询字符串传递到WebView Xamarin源中 在安卓系统中工作得很完美,但在IOS系统中有时似乎无法正常工作。我错过了什么 我注意到当NetCore网站需要做一些重定向时,它在IOS中不起作用:例如:用户输入电子邮件并单击下一步 public void WebView_NavigatingAsync(object sender, WebNavigatingEventArgs args) { if (!args.Url.Contains(Sour

我需要在导航()时将查询字符串传递到WebView Xamarin源中

在安卓系统中工作得很完美,但在IOS系统中有时似乎无法正常工作。我错过了什么

我注意到当NetCore网站需要做一些重定向时,它在IOS中不起作用:例如:用户输入电子邮件并单击下一步

 public void WebView_NavigatingAsync(object sender, WebNavigatingEventArgs args)
    {
        if (!args.Url.Contains(Source) && !args.Url.Contains("facebook") && !args.Url.Contains("google"))
        {
            var uri = new Uri(args.Url);
            // Device.OpenUri(uri);
            Launcher.OpenAsync(uri);
            args.Cancel = true;
        }
        else
        {
            var src = args.Url;
            string prefix = "?";
            if (src.Contains("?"))
            {
                prefix = "&";
            }
            if (!args.Url.Contains("mobileapp=true"))
            {
                args.Cancel = true;
                var webview = (WebView)sender;
                webview.Source = src + prefix + "mobileapp=true";                   
            }
        }
    }

我认为WebView中有一个bug。源代码为iOS,问号被编码,系统无法识别URL。 您可以创建自定义WebViewRender并将%3F替换为

在iOS项目上创建自定义WebViewRender

[assembly: ExportRenderer(typeof(CustomWebView), typeof(CustomWebViewRenderer))]

namespace Test.iOS.Renders
{
    public class CustomWebViewRenderer : WkWebViewRenderer
    {

        public override WKNavigation LoadRequest (NSUrlRequest request)
        {
            var url = request.Url.ToString().Replace("html%3F", "html?");
            var dotnetURI = new System.Uri(url);

            var idn = new System.Globalization.IdnMapping();
            NSUrl nsURL = new NSUrl(dotnetURI.Scheme, idn.GetAscii(dotnetURI.DnsSafeHost), dotnetURI.PathAndQuery);
               
            return base.LoadRequest(new NSUrlRequest(nsURL));
        }
    }
}
在Xamarin项目上使用自定义WebView

cs文件:

namespace Test.Renders
{
    public class CustomWebView : WebView
    {
    }
}
Xaml文件:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:test="clr-namespace:Test.Renders"
         ...>
<ContentPage.Content>
    <StackLayout>
        <test:CustomWebView x:Name="map"
                           HorizontalOptions="FillAndExpand"
                           VerticalOptions="FillAndExpand"/>
  ...

...

Hi,您的意思是
args.Url.Contains
不起作用?Hi,此代码在Url的末尾添加一个查询字符串。示例:www.netcorewebsite.com?mobileapp=true,在Android系统中工作得非常完美。但是没有;当.Net核心网站需要重定向时,无法在IOS中工作。前用户输入电子邮件并单击下一步。