Flutter http.get 在编译为 Web 或 Android 时发送 OPTIONS 而不是 GET
Flutter http.get send OPTIONS instead GET when compiled to Web or Andriod
我正在尝试从 Flutter 中的 REST 端点获取数据。但是,当它到达端点时,它显示为 OPTIONS
而不是 GET
。做更多测试,当我将设备设置为 Windows(桌面)时,下面的代码确实有效,但 Chrom Web 和 Android 不起作用。
我是不是做错了什么或者是否有正确的方法来强制 GET
?这是我的代码:
var url = Uri.https('mywebsite', '/api/v1/MyEndpoint');
final response = await http.get(
url,
headers: {
HttpHeaders.authorizationHeader:
'Bearer $token',
HttpHeaders.contentTypeHeader: 'application/json'
},
);
查看端点的日志显示:
Request starting HTTP/1.1 OPTIONS https://mywebsite/api/v1/MyEndpoint - 0
Executing endpoint '405 HTTP Method Not Supported'
Flutter returns错误:
Error: XMLHttpRequest error.
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart 910:28 get current
packages/http/src/browser_client.dart 69:22 <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/zone.dart 1685:54 runUnary
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 159:18 handleValue
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 766:44 handleValueCallback
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 795:13 _propagateToListeners
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 592:7 [_complete]
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/stream_pipe.dart 61:11 _cancelAndValue
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/stream.dart 1288:7 <fn>
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 37301:58 <fn>
at Object.createErrorWithStack (http://localhost:51989/dart_sdk.js:5080:12)
at Function._throw (http://localhost:51989/dart_sdk.js:20337:18)
at Function.throwWithStackTrace (http://localhost:51989/dart_sdk.js:20334:18)
at async._AsyncCallbackEntry.new.callback (http://localhost:51989/dart_sdk.js:40851:18)
at Object._microtaskLoop (http://localhost:51989/dart_sdk.js:40708:13)
at _startMicrotaskLoop (http://localhost:51989/dart_sdk.js:40714:13)
at http://localhost:51989/dart_sdk.js:36191:9
奖金问题:为什么错误消息在 XMLHttpRequest 中?我要 JSON.
注意:端点确实有效,我可以从 Postman 中点击,这是成功日志的样子:
Request starting HTTP/1.1 GET https://mywebsite/api/v1/MyEndpoint - 0
Successfully validated the token.
//Logging of the Request
编辑:发现它在为 Windows 编译时工作正常,但在发送到 Andriod 或 Web 时不起作用。
寻找CORS(Cross-Origin资源共享),浏览器先发送OPTIONS
请求URL 与当前的不同。比如你调试的时候你的浏览器URL是localhost:PORT
,但是你的网站不一样。您必须修复网站上的 CORS
处理才能使此连接正常工作。 PS:使用 Postman 发送 OPTIONS
进行测试。
我正在尝试从 Flutter 中的 REST 端点获取数据。但是,当它到达端点时,它显示为 OPTIONS
而不是 GET
。做更多测试,当我将设备设置为 Windows(桌面)时,下面的代码确实有效,但 Chrom Web 和 Android 不起作用。
我是不是做错了什么或者是否有正确的方法来强制 GET
?这是我的代码:
var url = Uri.https('mywebsite', '/api/v1/MyEndpoint');
final response = await http.get(
url,
headers: {
HttpHeaders.authorizationHeader:
'Bearer $token',
HttpHeaders.contentTypeHeader: 'application/json'
},
);
查看端点的日志显示:
Request starting HTTP/1.1 OPTIONS https://mywebsite/api/v1/MyEndpoint - 0 Executing endpoint '405 HTTP Method Not Supported'
Flutter returns错误:
Error: XMLHttpRequest error.
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart 910:28 get current
packages/http/src/browser_client.dart 69:22 <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/zone.dart 1685:54 runUnary
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 159:18 handleValue
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 766:44 handleValueCallback
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 795:13 _propagateToListeners
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 592:7 [_complete]
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/stream_pipe.dart 61:11 _cancelAndValue
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/stream.dart 1288:7 <fn>
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 37301:58 <fn>
at Object.createErrorWithStack (http://localhost:51989/dart_sdk.js:5080:12)
at Function._throw (http://localhost:51989/dart_sdk.js:20337:18)
at Function.throwWithStackTrace (http://localhost:51989/dart_sdk.js:20334:18)
at async._AsyncCallbackEntry.new.callback (http://localhost:51989/dart_sdk.js:40851:18)
at Object._microtaskLoop (http://localhost:51989/dart_sdk.js:40708:13)
at _startMicrotaskLoop (http://localhost:51989/dart_sdk.js:40714:13)
at http://localhost:51989/dart_sdk.js:36191:9
奖金问题:为什么错误消息在 XMLHttpRequest 中?我要 JSON.
注意:端点确实有效,我可以从 Postman 中点击,这是成功日志的样子:
Request starting HTTP/1.1 GET https://mywebsite/api/v1/MyEndpoint - 0
Successfully validated the token.
//Logging of the Request
编辑:发现它在为 Windows 编译时工作正常,但在发送到 Andriod 或 Web 时不起作用。
寻找CORS(Cross-Origin资源共享),浏览器先发送OPTIONS
请求URL 与当前的不同。比如你调试的时候你的浏览器URL是localhost:PORT
,但是你的网站不一样。您必须修复网站上的 CORS
处理才能使此连接正常工作。 PS:使用 Postman 发送 OPTIONS
进行测试。