首页 > 解决方案 > Xamarin.Forms android WebView 空白,没有有效的 SSL 证书(开发环境)

问题描述

在我的本地 PC 开发环境中,我有一个 dotnetcore 2.2 项目在端口 5000 作为 https 和 5001 作为 http 运行。我需要在我的开发环境中使用 https。在我的 PC 上,我可以通过https://localhost:5000/输入而不会出现任何错误(VS 安装 localhost SSL 证书)。使用我的 PC IP https://192.168.0.2:5000浏览器启动 SSL 证书错误(SSL 证书适用于 localhost)。我正在为 Android(9.0API 级别 28)和 iOS 开发 Xamarin.Forms 4.5.0.396,并且我正在使用标准的 WebView 控件。

在 Android 中,当我导航 (webView.Source) 到http://192.168.0.2:5001时,它可以工作,但是当我尝试https://192.168.0.2:5000时,webView 保持空白。没有例外,但已启动导航事件。我尝试了几种方法,例如暴露在:

ClientCertRequestHandler 未知且不知道要引用的程序集

另外,我知道这不是解决方案,但我实现了一个自定义渲染器(https://docs.microsoft.com/es-es/xamarin/xamarin-forms/app-fundamentals/custom-renderer/hybridwebview)来尝试覆盖 SSL 验证方法,但它不起作用。

有什么建议吗?

标签: androidsslxamarin.formswebview

解决方案


解决方案是覆盖 JavaScript WebClient 类上的 OnReceivedSslError 方法,如下所示:

    public class JavascriptWebViewClient : WebViewClient
{
    string _javascript;

    public JavascriptWebViewClient(string javascript)
    {
        _javascript = javascript;
    }

    public override void OnReceivedSslError(Android.Webkit.WebView view, SslErrorHandler handler, Android.Net.Http.SslError error)
    {
        //base.OnReceivedSslError(view, handler, error);
        handler.Proceed();
    }

    public override void OnPageFinished(Android.Webkit.WebView view, string url)
    {
        base.OnPageFinished(view, url);
        view.EvaluateJavascript(_javascript, null);
    }
}

问题是添加 OnReceivedSllError 我有两个 MAX_PATH 错误...不知道为什么,但是重建或清理解决方案不起作用。

我多次清理解决方案,移动到最靠近根文件夹的位置。Clean and Rebuild without run, then run 对我有用,但此方法没有断点停止。

这在 Xamarin.Forms 4.5.0.396 上是一个非常奇怪的行为,但在更新到 Xamarin.Forms 4.5.0.495 后它可以工作并在断点处停止


推荐阅读