eIT.com.cn 2023/2/24 21:35:04 阅读 13 次
最近 chatgpt 很火,由于网页版本限制了 ip,还得必须开代理,用起来比较麻烦,所以我尝试用 maui 开发一个聊天小应用,结合 chatgpt 的开放 api 来实现(很多客户端使用网页版本接口用 cookie 的方式,有很多限制(如下图)总归不是很正规)。 效果如下 mac 端由于需要升级 macos13 才能开发调试,这部分我还没有完成,不过 maui 的控件是跨平台的,放在后续我升级系统再说。 开发实战我是设想开发一个类似 jetbrains 的 ToolBox 应用一样,启动程序在桌面右下角出现托盘图标,点击图标弹出应用(风格在 windows mac 平台保持一致) 需要实现的功能一览
新建一个 maui 工程(vs2022) 坑一:默认编译出来的 exe 是直接双击打不开的 工程文件加上这个配置
以上修改后,编译出来的 exe 双击就可以打开了 托盘图标(右键点击有 menu)启动时设置窗口不能改变大小,隐藏 titlebar, 让 Webview 控件占满整个窗口 这里要根据平台不同实现不同了,windows 平台采用 winAPI 调用,具体看工程代码吧! WebView在 MainPage.xaml 添加控件 对应的静态 html 等文件放在工程的 Resource\Raw 文件夹下 (整个文件夹里面默认是作为内嵌资源打包的,工程文件里面的如下配置起的作用) 【重点】js 和 csharp 互相调用这部分我找了很多资料,最终参考了这个 demo,然后改进了下。 主要原理是:
js 的调用封装如下: // 调用csharp的方法封装 export default class CsharpMethod { constructor(command, data) { this.RequestPrefix = "request_csharp_"; this.ResponsePrefix = "response_csharp_"; // 唯一 this.dataId = this.RequestPrefix + new Date().getTime(); // 调用csharp的命令 this.command = command; // 参数 this.data = { command: command, data: !data ? '' : JSON.stringify(data), key: this.dataId } } // 调用csharp 返回promise call() { // 把data存储到localstorage中 目的是让csharp端获取参数 localStorage.setItem(this.dataId, this.utf8_to_b64(JSON.stringify(this.data))); let eventKey = this.dataId.replace(this.RequestPrefix, this.ResponsePrefix); let that = this; const promise = new Promise(function (resolve, reject) { const eventHandler = function (e) { window.removeEventListener(eventKey, eventHandler); let resp = e.newValue; if (resp) { // 从base64转换 let realData = that.b64_to_utf8(resp); if (realData.startsWith('err:')) { reject(realData.substr(4)); } else { resolve(realData); } } else { reject("unknown error :" + eventKey); } }; // 注册监听回调(csharp端处理完发起的) window.addEventListener(eventKey, eventHandler); }); // 改变location 发送给csharp端 window.location = "/api/" + this.dataId; return promise; } // 转成base64 解决中文乱码 utf8_to_b64(str) { return window.btoa(unescape(encodeURIComponent(str))); } // 从base64转过来 解决中文乱码 b64_to_utf8(str) { return decodeURIComponent(escape(window.atob(str))); } } 前端的使用方式 import CsharpMethod from '../../services/api' // 发起调用csharp的chat事件函数 const method = new CsharpMethod("chat", {msg: message}); method.call() // call返回promise .then(data =>{ // 拿到csharp端的返回后展示 onMessageHandler({ message: data, username: 'Robot', type: 'chat_message' }); }).catch(err => { alert(err); }); csharp 端的处理: 这么封装后,js 和 csharp 的互相调用就很方便了。 chatgpt 的开放 api 调用注册好 chatgpt 后可以申请一个 APIKEY。 API 封装: public static async Task 调用方式 var reply = await ChatService.GetResponseDataAsync('xxxxxxxxxx'); 完整代码参考~ 在学习 maui 的过程中,遇到问题我在 Microsoft Learn 提问,回答的效率很快,推荐大家试试看! 点我了解更多 MAUI 相关资料~ 到此这篇关于使用 .NET MAUI 开发 ChatGPT 客户端的文章就介绍到这了,更多相关.NET MAUI 开发 ChatGPT 内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站! |
• 使用.net core 自带DI框架实现延迟加载功能 (2023/2/24 21:35:05)
• uni-app结合.NET 7实现微信小程序订阅消息推送 (2023/2/24 21:35:05)
• .net core 3.1 Redis安装和简单使用 (2023/2/24 21:35:05)
• ASP.NET Core按用户等级授权的方法 (2023/2/24 21:35:05)
• MessagePack 和System.Text.Json 序列化和反序列化性能及对比分析 (2023/2/24 21:35:05)
• ASP.NET Core 7 Razor Pages项目发布到IIS的详细过程 (2023/2/24 21:35:04)
• Visual Studio 2022 MAUI NU1105(NETSDK1005) 问题处理记录 (2023/2/24 21:35:04)
• .net core利用PdfSharpCore操作PDF实例教程 (2023/2/24 21:35:04)
• 如何在.Net 7中将Query绑定到数组详解 (2023/2/24 21:35:04)
• 使用 .NET MAUI 开发 ChatGPT 客户端的流程 (2023/2/24 21:35:04)
IMail Server | 防火墙技术专题 | Debian | TestNG | OSPF协议 | DAX函数 | Angular 4 | SAP C4C | Cisco 路由配置 | 漏洞补丁 | matlab | qTest | EasyMock | Apache Kafka | 手机QQ | Vista优化 | Oracle 体系架构 | 综合布线 | 网吧游戏服务器 | 面向对象的Python
合作媒体与友情链接 |
生活常识小贴士 | 软件开发教程 | 智慧城市生活网 | 息县通生活服务[移动版] | 息县商圈[移动版] | 美食菜谱 |
健康养生 | 法律知识 | 科技频道 | 电影影讯 | 留学考研学习 | 星座生肖|解梦说梦 |
关于我们 | 联系我们 | 合作媒体 | 使用条款 | 隐私权声明 | 版权声明 |
Copyright © 2023 eIT.com.cn. All Rights Reserved. | 豫ICP备2022012332号 |