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
相关产品推荐
相关产品推荐

