Unity WebGL构建项目无法连接SmarterAsp.net部署的API求助
Unity WebGL构建后API调用失败的解决方案
问题根源分析
你遇到的是CORS跨域资源共享问题:浏览器发送的OPTIONS预请求(用于校验服务器是否允许跨域访问)未返回200 OK状态,导致请求被拦截。另外你的代码存在关键错误:Access-Control-Allow-*这类头是服务器需要返回的响应头,并非客户端请求时需发送的内容,手动添加不仅无效,还可能干扰预请求流程。同时Host头UnityWebRequest会自动根据URL填充,无需手动设置。
修正后的请求代码
IEnumerator GetDataCoroutineASync() { // 显示加载状态 outPutArea.text = "Loading....."; string uri = "http://syriatech07-001-site1.htempurl.com/Users"; using (UnityWebRequest request = UnityWebRequest.Get(uri)) { // 移除所有错误的请求头,仅保留业务必要的请求头(如果有) // 无需手动设置Host、Access-Control-*相关头 var op = request.SendWebRequest(); yield return op; if (request.isNetworkError) { outPutArea.text = "网络错误: " + request.error; } else if (request.isHttpError) { outPutArea.text = "HTTP错误: " + request.responseCode + " " + request.error; } else { outPutArea.text = request.downloadHandler.text; } } }
核心解决步骤
1. 服务器端配置CORS(必须操作)
WebGL运行在浏览器环境下,严格受同源策略限制,必须让目标API服务器正确处理CORS规则:
- 确保服务器对OPTIONS预请求返回200 OK状态
- 响应头中添加必要的跨域许可:
Access-Control-Allow-Origin: http://localhost:64929(生产环境建议指定具体域名,而非*)Access-Control-Allow-Methods: GET, POST, OPTIONS(根据API支持的请求方法调整)Access-Control-Allow-Headers: Content-Type, Authorization(根据实际业务需要的请求头设置)
- 从域名
htempurl.com判断你使用的是Azure临时站点,可直接在Azure门户的CORS设置面板中配置允许的来源。
2. 本地调试临时方案
若暂时无法修改服务器配置,可尝试以下临时调试方式:
- 在Unity编辑器中进入
Edit > Project Settings > Player > WebGL Settings > Publishing Settings,勾选Enable Cross-Origin Emulation(仅适用于编辑器内WebGL预览,构建后无效) - 使用本地代理工具(如Charles、ProxyMan)转发请求,绕过浏览器的CORS校验
为什么测试API(https://httpbin.org/get)能正常工作
因为httpbin.org的服务器已正确配置CORS响应头,会自动处理OPTIONS预请求并返回跨域许可信息,因此浏览器允许请求正常通过。
内容的提问来源于stack exchange,提问作者Abdalrohman AL HAJ ALI
相关产品推荐
相关产品推荐

