Unity中使用WWWForm调用Azure Custom Vision接口报401未授权问题
我之前也碰到过一模一样的情况——Postman里请求完全正常,一移植到Unity就报401权限错误,大概率是请求头的添加方式出了问题,咱们一步步来排查解决:
1. 核心问题:错误的请求头添加方式
你现在是把Prediction-Key加到WWWForm的headers里,但Unity的WWWForm会自动生成表单相关的请求头(比如Content-Type),手动添加的头部往往不会被正确携带到最终请求中。正确的做法是直接给UnityWebRequest设置请求头:
修改后的代码如下:
WWWForm form = new WWWForm(); form.AddBinaryData("fileUpload", texture.EncodeToPNG()); UnityWebRequest req = UnityWebRequest.Post(link, form); // 直接给UnityWebRequest添加请求头,而非WWWForm req.SetRequestHeader("Prediction-Key", "xxxxxxxxxxxxxxxxxxxxxxxx"); yield return req.SendWebRequest(); // 建议加上错误日志,方便后续排查细节 if (req.result != UnityWebRequest.Result.Success) { Debug.LogError($"请求失败:{req.error} | 响应详情:{req.downloadHandler.text}"); }
2. 其他辅助排查点
- 核对密钥与请求地址:虽然Postman能正常运行,但还是要确认Unity里的
Prediction-Key没有复制错误(比如多了空格、大小写不符),以及请求的link和Postman里的预测端点完全一致(别把训练API的端点当成预测端点了)。 - 查看Azure返回的具体错误:通过
req.downloadHandler.text可以获取Azure返回的详细错误描述,比如“Invalid prediction key”或者“Resource not found”,这能帮你更快定位问题根源。 - Unity版本兼容性:如果是比较老旧的Unity版本,
UnityWebRequest的某些行为可能存在差异,建议升级到LTS版本再测试。
内容的提问来源于stack exchange,提问作者Vlad Constantinescu
相关产品推荐
相关产品推荐

