首页 > 解决方案 > Dio 4.0.0 (Dart) 中奇怪的 BaseOptions 问题

问题描述

我遇到了一些奇怪的行为,这让我大吃一惊。

我有一段代码

import 'package:dio/dio.dart';
...
var baseOptions = BaseOptions(
        baseUrl: "http://localhost:8080");

如果我从简单的 Dart 控制台程序运行它,我会在调试器中得到它,最终可以正常工作: 在此处输入图像描述

但是,当我在 Flutter 的某个地方做同样的事情时,我得到了这个不起作用的奇怪东西:

在此处输入图像描述

这里发生了什么?在 Flutter 案例中我做错了什么?

标签: flutterdartdio

解决方案


我终于找到了答案。我在这个问题上的假设是错误的,但对于那些与我有相同根本原因分析路径的人,我不会删除它。

首先,我的问题不是 BaseOptions 中的怪异。我从 Dio 得到的实际错误只是字符串:“XMLHttpRequest 错误”。我开始发现任何奇怪的东西,并在 BaseOptions 中发现了分歧,这让我想到问题出在奇怪的 BaseOptions 上。不是,不是。真正的根本原因是CORS。由于我的构建使用了基于 Web 的 Flutter,并且在 Chrome 中打开了一个应用程序,因此 CORS 防御系统开始工作并阻止发送请求。在控制台 Dart 应用程序中一切正常,因为没有涉及 CORS。另一个问题是我使用了 POST 请求类型和自定义标头,这对于 CORS 策略也不太受欢迎。

因此,要解决我的问题,我必须做的是修复 CORS。

但是 BaseOptions 发生了什么?我不确定,但很可能与 Dart 代码编译为 JS 的方式有关。在调试器中看起来有点难看,但似乎 JS 出于某种原因需要知道哪个字段来自哪个地方。


推荐阅读