如何在DIO包中添加响应标头



我遇到了CORS XMLHttpRequest错误

访问位于"的XMLHttpRequesthttps://maps.googleapis.com/maps/api/place/autocomplete/json?params'来自原点'http://localhost:49234'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在"access control Allow Origin"标头。

这是我的代码

///get information of a place after getting its place ID from places autocomplete

Future<Place?> getPlaceDetails(String placeID, String sessionToken,
[Locale? locale]) async {
try {
var dio = Dio();
dio.options.headers = AppValues.headers;
dio.options.responseType = ResponseType.plain;
var response = await dio.get(detailsUrl(placeID, sessionToken, locale));
var json = convert.jsonDecode(response.data.toString());
var jsonResult = json[_f.result] as Map<String, dynamic>;
return Place.fromMap(jsonResult);
} catch (e) {
return null;
}

}

我读到了这个问题的答案,说必须在响应标头中添加"Access Control Allow Origin",而不是在请求标头中添加,我相信我正在做这件事。我已经有这个错误好几天了,需要一个永久的解决方案。我读过一些临时解决方案的答案,比如安装插件或禁用网络安全。但需要一个在我部署时可以工作的解决方案。无论是添加响应头(以及如何添加(,还是其他任何一个。请提供帮助,并衷心感谢您花时间提供任何帮助,我们深表感谢。

这是控制台中的错误日志

errors.dart:202 Uncaught (in promise) Error: DioError [DioErrorType.response]: XMLHttpRequest error.
Source stack:
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart 926:28                get current
packages/dio/src/dio_mixin.dart 473:35                                                                                         fetch
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
packages/dio/src/dio_mixin.dart 472:31                                                                                         fetch
packages/dio/src/dio_mixin.dart 468:12                                                                                         request
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
packages/dio/src/dio_mixin.dart 438:33                                                                                         request
packages/dio/src/dio_mixin.dart 55:12                                                                                          get
packages/app/services/places_service.dart 35:29                                                                                getAutoComplete
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
packages/app/services/places_service.dart 27:45                                                                                getAutoComplete
packages/app/blocs/map_bloc.dart 39:57                                                                                         searchPlaces
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
packages/app/blocs/map_bloc.dart 38:31                                                                                         searchPlaces
packages/app/custom/search_map.dart 132:36                                                                                     onChanged
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
packages/app/custom/search_map.dart 130:14                                                                                     onChanged
packages/flutter/src/material/text_form_field.dart 198:25                                                                      onChangedHandler
packages/flutter/src/widgets/editable_text.dart 2552:27                                                                        [_formatAndSetValue]
packages/flutter/src/widgets/editable_text.dart 1917:7                                                                         updateEditingValue
packages/flutter/src/services/text_input.dart 1596:9                                                                           _handleTextInputInvocation
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
packages/flutter/src/services/text_input.dart 1538:45                                                                          [_handleTextInputInvocation]
packages/flutter/src/services/platform_channel.dart 414:55                                                                     _handleAsMethodCall
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
packages/flutter/src/services/platform_channel.dart 411:40                                                                     [_handleAsMethodCall]
packages/flutter/src/services/platform_channel.dart 407:34                                                                     <fn>
packages/flutter/src/services/binding.dart 377:35                                                                              <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
packages/flutter/src/services/binding.dart 374:98                                                                              <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/platform_dispatcher.dart 1042:13               invoke2
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/ui/channel_buffers.dart 25:12                                 invoke
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/ui/channel_buffers.dart 65:7                                  push
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/ui/channel_buffers.dart 130:16                                push
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/platform_dispatcher.dart 304:25                invokeOnPlatformMessage
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/text_editing/text_editing.dart 1711:39         updateEditingState
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/text_editing/text_editing.dart 1817:17         <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/text_editing/text_editing.dart 1017:7          handleChange
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 334:14  _checkAndCall
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 339:39  dcall
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/html/dart2js/html_dart2js.dart 37277:58                              <fn>
at Object.throw_ [as throw] (errors.dart:251)
at dio_mixin.dart:628
at _RootZone.runBinary (zone.dart:1690)
at _FutureListener.catchError.handleError (future_impl.dart:174)
at handleError (future_impl.dart:778)
at Function._propagateToListeners (future_impl.dart:799)
at _Future.new.[_completeError] (future_impl.dart:609)
at _SyncCompleter.new.[_completeError] (future_impl.dart:60)
at _SyncCompleter.new.completeError (future_impl.dart:32)
at onError (future.dart:544)
at _RootZone.runBinary (zone.dart:1690)
at _FutureListener.then.handleError (future_impl.dart:174)
at handleError (future_impl.dart:778)
at Function._propagateToListeners (future_impl.dart:799)
at _Future.new.[_completeError] (future_impl.dart:609)
at async._AsyncCallbackEntry.new.callback (future_impl.dart:665)
at Object._microtaskLoop (schedule_microtask.dart:40)
at _startMicrotaskLoop (schedule_microtask.dart:49)
at async_patch.dart:166

CORS XMLHttpRequest error是服务器端错误。它与你的应用程序无关。在使用移动应用程序时,你不会面临任何类似的问题,但在flutter网络中,这很常见。你能做什么?-只需让您的服务器端人员或api开发人员启用他/她的项目CORS策略即可。几周前,我遇到了同样的问题,我问服务器人员,然后他从那里启用了CORS,但我仍然面临异常,然后我问api开发人员,他从他的django应用程序中启用了它,flutter web 也没有异常

错误是因为我使用的Maps-Api不是从客户端代码而是服务器端调用的。因此,解决方案是制作一个云函数,该函数发出请求并返回数据

import axios from "axios";
export const serverRequest = functions.https.onCall(async (url, context)=> {
isAuthenticatedAdmin(context);
const response = await axios.get(url as string).then(({data})=> data);
return response;
});

最新更新