MAUI android连接sqlserver

PDA是android系统,调用金蝶云星空webapi实现仓库收发料,使用读取webapi有些功能无法实现,需要直接读写数据库,读取报错,如图:

用控制台程序测试正常读取

google搜索了一圈, 都需要使用ssl证书才能解决,终于找到不用证书的解决办法,参考地址

c# - "Trust anchor for certification path not found." in a .NET Maui Project trying to contact a local .NET WebApi - Stack Overflow

操作步骤:

在Platforms\Android下新建DangerousTrustProvider.cs文件,如下图

添加命名空间

cs 复制代码
using System;
using Java.Net;
using Java.Security;
using Java.Security.Cert;
using Javax.Net.Ssl;

添加代码

cs 复制代码
internal class DangerousTrustProvider : Provider
{
    private const string TRUST_PROVIDER_ALG = "DangerousTrustAlgorithm";
    private const string TRUST_PROVIDER_ID = "DangerousTrustProvider";

    public DangerousTrustProvider() : base(TRUST_PROVIDER_ID, 1, string.Empty)
    {
        var key = "TrustManagerFactory." + DangerousTrustManagerFactory.GetAlgorithm();
        var val = Java.Lang.Class.FromType(typeof(DangerousTrustManagerFactory)).Name;
        Put(key, val);
    }

    public static void Register()
    {
        Provider registered = Security.GetProvider(TRUST_PROVIDER_ID);
        if (null == registered)
        {
            Security.InsertProviderAt(new DangerousTrustProvider(), 1);
            Security.SetProperty("ssl.TrustManagerFactory.algorithm", TRUST_PROVIDER_ALG);
        }
    }

    public class DangerousTrustManager : X509ExtendedTrustManager
    {
        public override void CheckClientTrusted(X509Certificate[] chain, string authType, Socket socket) { }
        public override void CheckClientTrusted(X509Certificate[] chain, string authType, SSLEngine engine) { }
        public override void CheckClientTrusted(X509Certificate[] chain, string authType) { }
        public override void CheckServerTrusted(X509Certificate[] chain, string authType, Socket socket) { }
        public override void CheckServerTrusted(X509Certificate[] chain, string authType, SSLEngine engine) { }
        public override void CheckServerTrusted(X509Certificate[] chain, string authType) { }
        public override X509Certificate[] GetAcceptedIssuers() => Array.Empty<X509Certificate>();
    }

    public class DangerousTrustManagerFactory : TrustManagerFactorySpi
    {
        protected override void EngineInit(IManagerFactoryParameters mgrparams) { }
        protected override void EngineInit(KeyStore keystore) { }
        protected override ITrustManager[] EngineGetTrustManagers() => new ITrustManager[] { new DangerousTrustManager() };
        public static string GetAlgorithm() => TRUST_PROVIDER_ALG;
    }
}

复制上面的代码,粘贴替换,如图

完整代码如图

打开,MauiProgram.cs增加调用代码

cs 复制代码
#if ANDROID
	Platforms.Android.DangerousTrustProvider.Register();
#endif

如图

再次用模拟器测试,读取成功

相关推荐
冬奇Lab9 小时前
MediaPlayer 播放器架构:NuPlayer 的 Source/Decoder/Renderer 三驾马车
android·音视频开发·源码阅读
炸炸鱼.10 小时前
Python 操作 MySQL 数据库
android·数据库·python·adb
用户416596736935512 小时前
nextlib 项目架构与深度技术指南 (Architecture & Technical Master Guide)
android
aq553560012 小时前
Laravel10.x重磅升级,新特性一览
android·java·开发语言
Trouvaille ~13 小时前
【MySQL篇】数据类型:存储数据的基础
android·数据库·mysql·adb·字符集·数据类型·基础入门
2401_8858850414 小时前
开发视频短信接口好开发吗?图文视频短信接口对接教程
android·音视频
千码君201615 小时前
kotlin:Jetpack Compose 给APP添加声音(点击音效/背景音乐)
android·开发语言·kotlin·音效·jetpack compose
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.15 小时前
MySQL半同步复制与GTID实战详解
android·mysql·adb
用户416596736935516 小时前
深度解码:记一次视频时间戳(PTS)异常导致的播放故障排查
android
大白菜和MySQL18 小时前
linux系统环境常用命令
android·linux·adb