You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:37:22