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

Unity调用PowerBI流式API提交数据遇权限与请求错误求助

问题解决:Unity通过PowerBI流式API提交数据的错误修复

1. 第一个代码的Post方法错误

UnityWebRequest的Post是静态方法,不能用new UnityWebRequest.Post()的方式调用,正确调用为UnityWebRequest.Post(...)。但该方法默认提交application/x-www-form-urlencoded格式的表单数据,不符合PowerBI的JSON要求,因此直接采用第二种UploadHandlerRaw的实现思路更合适。

2. 400 Bad Request错误核心原因

PowerBI流式数据源要求请求体为JSON数组格式(外层用[]包裹单个或多个对象),但你的代码生成的是单个对象的JSON,同时缺少Content-Type: application/json请求头,导致PowerBI无法识别数据格式,触发400错误。

3. 修正后的完整代码

using System;
using System.Collections;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;

public class PlayerData
{
    public int Experience;
    public int Confidence;
}

public class APIPost : MonoBehaviour
{
    // 替换为你的PowerBI流式数据源URL
    private string powerBiUrl = "https://blahblahblah";

    public void StartPost()
    {
        StartCoroutine(PostDataToPowerBI());
    }

    IEnumerator PostDataToPowerBI()
    {
        // 构造数据对象
        PlayerData player = new PlayerData();
        player.Experience = 3;
        player.Confidence = 5;

        // 转换为PowerBI要求的JSON数组格式
        string singleJson = JsonUtility.ToJson(player);
        string jsonArray = $"[{singleJson}]";

        byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonArray);

        using (UnityWebRequest request = new UnityWebRequest(powerBiUrl, "POST"))
        {
            request.uploadHandler = new UploadHandlerRaw(bodyRaw);
            request.downloadHandler = new DownloadHandlerBuffer();
            // 添加必要的Content-Type请求头
            request.SetRequestHeader("Content-Type", "application/json");

            yield return request.SendWebRequest();

            if (request.result != UnityWebRequest.Result.Success)
            {
                Debug.LogError($"请求错误: {request.error}, 状态码: {request.responseCode}");
            }
            else
            {
                Debug.Log($"提交成功,状态码: {request.responseCode}, 返回内容: {request.downloadHandler.text}");
            }
        }
    }
}

额外注意事项

  • URL与权限验证:确认PowerBI流式数据源的URL正确(注意是否包含/api/events这类必要路径),当前账号拥有该数据源的写入权限。
  • 先通过Postman验证:在Unity代码调试前,先用Postman提交修正后的JSON数组格式数据,确认API本身可正常接收数据,排除后端配置问题。
  • Unity版本兼容:2020+版本的Unity建议使用request.result替代已过时的request.error判断请求状态。

内容的提问来源于stack exchange,提问作者epeter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:45:02