Unity3D中UnityWebRequest拼接含参数URL后无法请求问题求助
正确处理Unity中动态拼接URL参数的方法
核心问题分析
你遇到的问题主要来自两个点:
- 动态输入的用户名/密码未做URL编码,如果包含空格、
&、=、%等特殊字符,会直接破坏URL的参数结构 - 组件引用错误:代码中使用
TMP_Text接收输入,但输入框应该绑定TMP_InputField组件,否则无法获取用户实际输入的内容
修正后的代码实现
步骤1:修正组件引用类型
将代码中的文本组件替换为输入框组件,确保绑定正确:
public Image messageBoxContainer; // 修正为输入框组件,对应Unity中的TextMeshPro输入框 public TMP_InputField userNameInput; public TMP_InputField passwordInput; public TextMeshProUGUI messageBoxText; private string URL;
步骤2:对参数进行URL编码并拼接
使用UnityWebRequest.EscapeURL()对参数值编码,避免特殊字符破坏URL结构:
public void CreateUrl() { // 去除输入内容前后空格,并对参数值做URL编码 string encodedUsername = UnityWebRequest.EscapeURL(userNameInput.text.Trim()); string encodedPassword = UnityWebRequest.EscapeURL(passwordInput.text.Trim()); // 拼接编码后的URL(注意参数间用单个&分隔,而非硬编码里的&&) URL = $"https://localhost:44310/api/users/getbyaccount?username={encodedUsername}&password={encodedPassword}"; messageBoxText.text = URL; StartCoroutine(GetResult()); }
步骤3:完善请求协程的错误捕获
增加协议错误的判断,覆盖更多异常场景:
IEnumerator GetResult() { using (UnityWebRequest request = UnityWebRequest.Get(URL)) { yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError) { Debug.Log(request.error); messageBoxText.text = $"请求失败:{request.error}"; } else { string message = request.downloadHandler.text; messageBoxContainer.gameObject.SetActive(true); messageBoxText.text = message; } } }
更简洁的优化方案
推荐使用WWWForm构建参数,Unity会自动处理编码,无需手动拼接:
public void CreateUrl() { WWWForm form = new WWWForm(); form.AddField("username", userNameInput.text.Trim()); form.AddField("password", passwordInput.text.Trim()); // 将表单转换为标准查询字符串 string queryString = form.ToString(); URL = $"https://localhost:44310/api/users/getbyaccount?{queryString}"; messageBoxText.text = URL; StartCoroutine(GetResult()); }
内容的提问来源于stack exchange,提问作者infiniteloop-0
相关产品推荐
相关产品推荐

