Xamarin.Forms android WebView 空白表示没有有效的 SSL 证书(开发环境)
Xamarin.Forms android WebView blank for no valid SSL certificate (develop environment)
在我本地的 PC 开发环境中,我有一个 dotnetcore 2.2 项目 运行 在端口 5000 作为 https 和 5001 作为 http。我需要在我的开发环境中使用 https。
在我的电脑上,我可以通过 https://localhost:5000/ without any error (VS install a localhost SSL certificate). Using my PC IP https://192.168.0.2:5000 进入浏览器启动 SSL 证书错误(SSL 证书用于本地主机)。
我正在为 Android(9.0API 级别 28)和 iOS 开发 Xamarin.Forms 4.5.0.396,并且我使用的是标准 WebView 控件。
在 Android 中,当我导航 (webView.Source) 到 http://192.168.0.2:5001, it works, but when I try https://192.168.0.2:5000 时,webView 保持空白。没有异常,但已启动 Navigated 事件。
我尝试了几种方法,比如暴露在:
WebView with SSL Client Certificate on Android 4 ICS
public void onReceivedClientCertRequest(WebView 视图,ClientCertRequestHandler 处理程序,字符串 host_and_port)
ClientCertRequestHandler 未知,也不知道要引用的程序集
-
这个问题中的设置 network_security_config.xml 和其他内容对我不起作用。
此外,我知道这不是解决方案,但我实现了一个自定义渲染器 (https://docs.microsoft.com/es-es/xamarin/xamarin-forms/app-fundamentals/custom-renderer/hybridwebview) 来尝试覆盖 SSL 验证方法,但它不起作用。
有什么建议吗?
解决方案是覆盖 JavaScript WebClient class 上的 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 错误...
不知道为什么,但重建或清理解决方案不起作用。
我多次清理解决方案,移动到最靠近根文件夹的位置。
在没有 运行 的情况下清理和重建,然后 运行 对我有用,但此方法没有断点停止。
这在 Xamarin.Forms 4.5.0.396 上确实是一个非常奇怪的行为,但是在更新到 Xamarin.Forms 4.5.0.495 之后它可以工作并在断点处停止
在我本地的 PC 开发环境中,我有一个 dotnetcore 2.2 项目 运行 在端口 5000 作为 https 和 5001 作为 http。我需要在我的开发环境中使用 https。 在我的电脑上,我可以通过 https://localhost:5000/ without any error (VS install a localhost SSL certificate). Using my PC IP https://192.168.0.2:5000 进入浏览器启动 SSL 证书错误(SSL 证书用于本地主机)。 我正在为 Android(9.0API 级别 28)和 iOS 开发 Xamarin.Forms 4.5.0.396,并且我使用的是标准 WebView 控件。
在 Android 中,当我导航 (webView.Source) 到 http://192.168.0.2:5001, it works, but when I try https://192.168.0.2:5000 时,webView 保持空白。没有异常,但已启动 Navigated 事件。 我尝试了几种方法,比如暴露在:
WebView with SSL Client Certificate on Android 4 ICS
public void onReceivedClientCertRequest(WebView 视图,ClientCertRequestHandler 处理程序,字符串 host_and_port)
ClientCertRequestHandler 未知,也不知道要引用的程序集
- 这个问题中的设置 network_security_config.xml 和其他内容对我不起作用。
此外,我知道这不是解决方案,但我实现了一个自定义渲染器 (https://docs.microsoft.com/es-es/xamarin/xamarin-forms/app-fundamentals/custom-renderer/hybridwebview) 来尝试覆盖 SSL 验证方法,但它不起作用。
有什么建议吗?
解决方案是覆盖 JavaScript WebClient class 上的 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 错误... 不知道为什么,但重建或清理解决方案不起作用。
我多次清理解决方案,移动到最靠近根文件夹的位置。 在没有 运行 的情况下清理和重建,然后 运行 对我有用,但此方法没有断点停止。
这在 Xamarin.Forms 4.5.0.396 上确实是一个非常奇怪的行为,但是在更新到 Xamarin.Forms 4.5.0.495 之后它可以工作并在断点处停止