Unity 使用WebAPI制作登录注册
你的代码看起来是一个客户端与服务器通信的示例,使用了Unity引擎和一些常见的网络库。以下是一些关键点和改进建议:
数据库操作:
- 在
AccountDataHelper.cs中,你创建了一个数据库连接并执行了查询。确保在每次查询后关闭数据库连接。 - 使用参数化查询来防止SQL注入攻击。
- 在
网络通信:
- 你在
NetWorkHttp.cs中实现了HTTP请求。确保使用HTTPS来保护数据传输的安全性。 - 处理网络请求的错误和异常,以提高代码的健壮性。
- 你在
JSON处理:
- 在
Thttp.cs中,你使用了LitJson库来处理JSON数据。确保正确解析和生成JSON数据。 - 在
PostCallBack方法中,检查retValue.HasError是否为真,并根据需要进行相应的处理。
- 在
代码结构和可读性:
- 将代码分解为更小的函数和类,以提高可读性和可维护性。
- 添加注释来解释关键逻辑和功能。
以下是一些具体的改进建议:
数据库操作
public class AccountDataHelper { private string connectionString; public AccountDataHelper(string connString) { connectionString = connString; } public bool IsUserExist(string username) { using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); string query = "SELECT COUNT(*) FROM Users WHERE Username = @Username"; SqlCommand command = new SqlCommand(query, connection); command.Parameters.AddWithValue("@Username", username); int count = Convert.ToInt32(command.ExecuteScalar()); return count > 0; } } // 其他数据库操作方法 } 网络通信
public class NetWorkHttp : MonoBehaviour { private static NetWorkHttp instance; public static NetWorkHttp Instance => instance ?? (instance = FindObjectOfType<NetWorkHttp>()); public void SendDate(string url, Action<CallBackArgs> callback, bool isPost = false, string json = null) { if (isPost) { StartCoroutine(PostRequest(url, json, callback)); } else { StartCoroutine(GetRequest(url, callback)); } } private IEnumerator PostRequest(string url, string json, Action<CallBackArgs> callback) { WWWForm form = new WWWForm(); form.AddField("", json); using (UnityWebRequest www = UnityWebRequest.Post(url, form)) { yield return www.SendWebRequest(); if (www.result != UnityWebRequest.Result.Success) { Debug.LogError(www.error); callback?.Invoke(new CallBackArgs { isError = true, errorMsg = www.error }); } else { callback?.Invoke(new CallBackArgs { isError = false, json = www.downloadHandler.text }); } } } private IEnumerator GetRequest(string url, Action<CallBackArgs> callback) { using (UnityWebRequest www = UnityWebRequest.Get(url)) { yield return www.SendWebRequest(); if (www.result != UnityWebRequest.Result.Success) { Debug.LogError(www.error); callback?.Invoke(new CallBackArgs { isError = true, errorMsg = www.error }); } else { callback?.Invoke(new CallBackArgs { isError = false, json = www.downloadHandler.text }); } } } public class CallBackArgs { public bool isError; public string errorMsg; public string json; } } JSON处理
public class Thttp : MonoBehaviour { void Start() { if (!NetWorkHttp.Instance.M_IsBusy) { JsonData jsondata = new JsonData(); jsondata["type"] = 0; /// 0 注册 1 登录 jsondata["username"] = "xxx"; jsondata["pwd"] = ""; NetWorkHttp.Instance.SendDate("http://192.168.1.125:8080/api/account", PostCallBack, isPost: true, json: jsondata.ToJson()); } } public void PostCallBack(NetWorkHttp.CallBackArgs arg) { if (arg.isError) { Debug.Log(arg.errorMsg); } else { RetValue retValue = JsonMapper.ToObject<RetValue>(arg.json); if (!retValue.HasError) { Debug.Log("用户编号" + retValue.Data); } } } } 这些改进将提高代码的可读性、安全性和健壮性。确保在实际项目中进行充分的测试和验证。