flutter - Dio 4.0.0 (Dart) 中奇怪的 BaseOptions 问题
问题描述
我遇到了一些奇怪的行为,这让我大吃一惊。
我有一段代码
import 'package:dio/dio.dart';
...
var baseOptions = BaseOptions(
baseUrl: "http://localhost:8080");
如果我从简单的 Dart 控制台程序运行它,我会在调试器中得到它,最终可以正常工作:
但是,当我在 Flutter 的某个地方做同样的事情时,我得到了这个不起作用的奇怪东西:
这里发生了什么?在 Flutter 案例中我做错了什么?
解决方案
我终于找到了答案。我在这个问题上的假设是错误的,但对于那些与我有相同根本原因分析路径的人,我不会删除它。
首先,我的问题不是 BaseOptions 中的怪异。我从 Dio 得到的实际错误只是字符串:“XMLHttpRequest 错误”。我开始发现任何奇怪的东西,并在 BaseOptions 中发现了分歧,这让我想到问题出在奇怪的 BaseOptions 上。不是,不是。真正的根本原因是CORS。由于我的构建使用了基于 Web 的 Flutter,并且在 Chrome 中打开了一个应用程序,因此 CORS 防御系统开始工作并阻止发送请求。在控制台 Dart 应用程序中一切正常,因为没有涉及 CORS。另一个问题是我使用了 POST 请求类型和自定义标头,这对于 CORS 策略也不太受欢迎。
因此,要解决我的问题,我必须做的是修复 CORS。
但是 BaseOptions 发生了什么?我不确定,但很可能与 Dart 代码编译为 JS 的方式有关。在调试器中看起来有点难看,但似乎 JS 出于某种原因需要知道哪个字段来自哪个地方。
推荐阅读
- multithreading - 使用 Dask 进行内存 Numpy 计算的工人与线程
- java - 获取“文字与格式字符串不匹配”的异常
- python - 根据另一列中指定的窗口大小在 pandas 中创建滚动窗口
- python - plt.savefig 不保存图像
- laravel - Backpack 4.1 路由语法
- r - 如何提高朴素贝叶斯分类器视觉的 R 图的质量/图形
- javascript - 在从 api 检查状态为 true 后,如何在表格单元格中选中和禁用复选框和
- c++ - 如何使 CMakelists.txt 仅包含一些 *.c 和 *.h 文件用于一个操作系统?
- winforms - 无法使用重音字符正确呈现信息
- c# - Asp Net Core 多连接字符串