.NET Core学习笔记(6)——UWP略过SSL证书调用SignalR服务

在前一篇《.NET Core学习笔记(5)——WebAPI从Server端push消息到Client》中,我们简单学习了.NET Core版本SignalR的使用。Sample工程里我们创建了一个Console的Client接受来自SignalR Hub推送的消息。
在最近的工作中,我尝试在UWP的项目中使用WebAPI+SignalR来代替WCF的双工消息。在创建demo的过程中,意外地遇到了错误。发现在.NET Core3.1中,忽略SSL证书的方式和以往有了较大的不同。

出现这个错误是因为我们的SignalR服务是以https协议发布在IISExpress上,而UWP程序调用SignalR client时会强制校验证书。一般解决的方式就是给UWP工程添加证书。但如果我只想做一个匿名登录的demo用client,或者我不愿信任该https网站的证书,那就要绕过SLL证书的校验。
上网搜了一下相关问题,答案确实很多,但都是旧有版本的解决方案。思路就是通过HttpClientHandler来设置略过校验。我这里贴一个.NET Core3.1版本的代码,给我自己做个记录,以备不时之需。

Action<HttpConnectionOptions> configureHttpConnection = (opts) => {
                opts.HttpMessageHandlerFactory = (message) =>
                {
                    if (message is HttpClientHandler clientHandler)
                        // bypass SSL certificate
                        clientHandler.ServerCertificateCustomValidationCallback +=
                            (sender, certificate, chain, sslPolicyErrors) => { return true; };
                    return message;
                };
            };

            var connection = new HubConnectionBuilder()
                .WithUrl("https://localhost:44354/NotificationHub", configureHttpConnection)
                .Build();

            await connection.StartAsync();

完整的Sample代码参加:
https://github.com/manupstairs/SignalRTest1
这次的小短篇就到这里,欢迎各路大牛批评指正!

 

posted @ 2020-05-01 22:08  楼上那个蜀黍  阅读(598)  评论(0编辑  收藏  举报