Unity中Http框架

server/2024/11/30 3:21:43/
http://www.w3.org/2000/svg" style="display: none;">

Unity中Http框架

  • 介绍
  • 框架代码
  • 使用方法
  • 总结

介绍

最近做了ASP.NET Web应用程序(.Net Framework)的Http服务,所以想也把之前我的Http框架也整理一下发布出来供大家参考。

框架代码

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;public class NetWorkHttpManager : MonoBehaviour
{#region 属性/// <summary>/// Web请求回调/// </summary>private Action<CallBackArgs> m_CallBack;/// <summary>/// Web请求回调数据/// </summary>private CallBackArgs m_CallBackArgs;/// <summary>/// 是否繁忙/// </summary>private bool m_IsBusy = false;/// <summary>/// 供外部访问是否繁忙/// </summary>public bool IsBusy{get{return m_IsBusy;}}/// <summary>/// 网络字典/// </summary>private Dictionary<string, string> m_httpDic = new Dictionary<string, string>();#endregionpublic static NetWorkHttpManager Instance;private void Awake(){Instance = this;m_CallBackArgs = new CallBackArgs();}#region 键值对/// <summary>/// 添加键值对/// </summary>/// <param name="key"></param>/// <param name="value"></param>public void AddValueToDic(string key, string value){m_httpDic.Add(key,value);}/// <summary>/// 移除字典/// </summary>/// <param name="key"></param>public void RemoveValueToDic(string key){if (m_httpDic.ContainsKey(key)){m_httpDic.Remove(key);}}/// <summary>/// 获取字典/// </summary>public Dictionary<string,string> GetDic(){return m_httpDic;}/// <summary>/// 清楚字典/// </summary>public void ClearDic(){m_httpDic.Clear();}#endregion#region SendData 发送Web数据public void SendData(string url, Action<CallBackArgs> callBack, bool IsPost = false, Dictionary<string, string> dic = null){if (m_IsBusy) return;m_IsBusy = true;m_CallBack = callBack;if (!IsPost) GetUrl(url);else{PostUrl(url,dic);}}#endregion#region GetUrl Get请求/// <summary>/// Get请求/// </summary>/// <param name="url"></param>private void GetUrl(string url){UnityWebRequest req = UnityWebRequest.Get(url);StartCoroutine(Request(req));}#endregion#region PostUrl Post请求/// <summary>/// Post请求/// </summary>/// <param name="url"></param>/// <param name="json"></param>private void PostUrl(string url, Dictionary<string, string> dic){UnityWebRequest req = UnityWebRequest.Post(url, dic);StartCoroutine(Request(req));}#endregion#region Request 请求服务器/// <summary>/// 请求服务器/// </summary>/// <param name="req"></param>/// <returns></returns>private IEnumerator Request(UnityWebRequest req){yield return req.SendWebRequest();m_IsBusy = false;//没有错误if (string.IsNullOrEmpty(req.error)){if (req.downloadHandler.text == "null"){if (m_CallBack != null){m_CallBackArgs.HasError = true;m_CallBackArgs.ErrorMsg = "未请求到用户";m_CallBack(m_CallBackArgs);}}else{if (m_CallBack != null){m_CallBackArgs.HasError = false;m_CallBackArgs.ErrorMsg = "";m_CallBackArgs.Value = req.downloadHandler.text;m_CallBack(m_CallBackArgs);}}}//有错误else{if (m_CallBack != null){m_CallBackArgs.HasError = true;m_CallBackArgs.ErrorMsg = req.error;m_CallBack(m_CallBackArgs);}}}#endregion}#region 回调类/// <summary>
/// Web请求回调数据
/// </summary>
public class CallBackArgs : EventArgs
{/// <summary>/// 是否有错误/// </summary>public bool HasError;/// <summary>/// 错误原因/// </summary>public string ErrorMsg;/// <summary>/// 返回值/// </summary>public string Value;
}#endregion

使用方法

		//Get请求if (!NetWorkHttpManager.Instance.IsBusy) {NetWorkHttpManager.Instance.SendData("urlxxxxxxxxxxxxx", (cb) => {if (cb.HasError) {Debug.LogError(cb.ErrorMsg);}else {Debug.LogError(cb.Value);}});}//Post请求if (!NetWorkHttpManager.Instance.IsBusy) {JsonData jsonData = new JsonData();jsonData["UserName"] = "ck";jsonData["Pwd"] = "ck123";NetWorkHttpManager.Instance.ClearDic();NetWorkHttpManager.Instance.AddValueToDic("", jsonData.ToJson());NetWorkHttpManager.Instance.SendData("http://192.168.1.120:8023/api/TestWeb", (cb) =>{if (cb.HasError){Debug.LogError(cb.ErrorMsg);}else{Debug.LogError(cb.Value);}}, true, NetWorkHttpManager.Instance.GetDic());}

总结

感谢大家的支持!


http://www.ppmy.cn/server/146062.html

相关文章

UE5材质混合模式

在 Unreal Engine 5 (UE5) 中&#xff0c;混合模式 (Blend Mode) 是材质系统中的一个重要设置&#xff0c;它定义了材质的透明度和渲染方式。混合模式控制了材质如何与背景进行混合&#xff0c;决定了物体的显示方式&#xff08;是否透明、如何透明、如何与其他物体交互等&…

Docker 容器网络创建网桥链接

一、网络:默认情况下,所有的容器都以bridge方式链接到docker的一个虚拟网桥上; 注意:“172.17.0.0/16”中的“/16”表示子网掩码的长度为16位,它表示子网掩码中有16个连续的1,后面跟着16个连续的0。用于区分IP地址中的网络部分和主机部分; 二、为何自定义网络? 加入自…

linux curl 和python with open 读取文件方式解读

Linux curl 和 Python 的 with open 的读取文件方式本质不同&#xff0c;尽管都可以处理文件内容。以下是详细对比&#xff1a; 1. curl 的文件读取 用途&#xff1a;curl 的 --form "file<file_path>" 或 -d <file_path> 选项读取文件内容&#xff0c;…

Spring框架整合单元测试

目录 一、配置文件方式 1.导入依赖 2.编写类和方法 3.配置文件applicationContext-test.xml 4.测试类 5.运行结果 二、全注解方式 1.编写类和方法 2.配置类 3.测试类 4.运行结果 每次进行单元测试的时候&#xff0c;都需要编写创建工厂&#xff0c;加载配置文件等相关…

ubuntu防火墙入门(一)——设置服务、关闭端口

本机想通过git clone gitgithub.com:skumra/robotic-grasping.git下载代码&#xff0c;firewall-config中需要为当前区域的防火墙开启SSH服务吗 是的&#xff0c;如果你想通过 git clone gitgithub.com:skumra/robotic-grasping.git 使用 SSH 协议从 GitHub 下载代码&#xff0…

Linux开发者的CI/CD(11)jenkins变量

文章目录 1. **环境变量 (Environment Variables)**常见的环境变量:示例:2. **构建参数 (Build Parameters)**常见的构建参数类型:示例:3 **在 `stages` 块内定义局部变量**示例:使用 `script` 步骤定义局部变量4 变量引用陷阱在 Jenkins 中,变量是自动化流程中非常重要的…

欢迪迈手机商城:SpringBoot框架的缓存机制

4 系统设计 欢迪迈手机商城的设计方案比如功能框架的设计&#xff0c;比如数据库的设计的好坏也就决定了该系统在开发层面是否高效&#xff0c;以及在系统维护层面是否容易维护和升级&#xff0c;因为在系统实现阶段是需要考虑用户的所有需求&#xff0c;要是在设计阶段没有经过…

【商业化GPT】AI对话|绘画|音乐|视频|文件|知识库于一体的商业化GPT解决方案

急速AI 是一个综合性的 AI Web 应用平台&#xff0c;旨在为用户提供一个集成化、易于部署的人工智能服务站点。参考ChatGPT 官网的理念&#xff0c;将多种 AI 技术集成于一个单一的平台中&#xff0c;从而提供了一个全方位的 AI 服务体验&#xff0c;包括但不限于对话、绘画、语…