我目前在 azure 事件网格命名空间上工作。在这里,我正在 IotHub 中接收某些数据。我使用消息路由从 IotHub 将消息路由到事件网格命名空间。现在使用 dart 语言 http.get() 我正在尝试打印响应正文。但我收到错误
获取数据时出错:XMLHttpRequest 错误。
之前在其他 Azure 服务中,我使用 CORS 遇到了此错误,但我能够克服此错误。但不幸的是,在 Azure 事件网格命名空间中没有 CORS 功能。有没有其他方法可以从 flutter(dart)的事件网格中读取数据。 下面是我的代码
import 'package:http/http.dart' as http;
import 'dart:convert';
Future<void> fetchDataFromEventGrid() async {
final url = 'https://<namespace name>.<region>.eventgrid.azure.net/api/events';
final apiKey = 'API key'; // If your endpoint requires an API key
try {
final response = await http.get(
Uri.parse(url),
headers: {
'Content-Type': 'application/json',
'aeg-sas-key': apiKey, // Azure Event Grid requires the aeg-sas-key header for authentication
},
);
if (response.statusCode == 200) {
final data = json.decode(response.body);
print('Data received from Event Grid: $data');
} else {
print('Failed to load data. Status code: ${response.statusCode}');
}
} catch (e) {
print('Error fetching data: $e');
}
}
void main() async {
await fetchDataFromEventGrid();
}
dart pub global activate flutter_cors
上述脚本用于禁用和重新启用 Flutter 的 Chrome 实例的 CORS 检查。
注:
此脚本仅禁用本地测试的 CORS 检查,不会解决生产中的 CORS 问题。请不要就生产 CORS 问题寻求帮助,因为它们不属于本项目的范围。
如果您在本地开发过程中遇到 CORS 问题,请使用
flutter_cors
在 Flutter 用于 Web 开发的 Chrome 实例中禁用 CORS 检查。另外,请确保根据加载的结束范围调整Networking中的Address range。
下面的代码旨在发出从 Azure 事件网格获取数据的请求:
'dart:convert'; Future<void> fetchDataFromEventGrid() async { final url = 'https://<namespace name>.<region>.eventgrid.azure.net/api/events'; final apiKey = 'API key'; // Replace with your actual API key try { final response = await http.get( Uri.parse(url), headers: { 'Content-Type': 'application/json', 'aeg-sas-key': apiKey, // Azure Event Grid requires the aeg-sas-key header for authentication }, ); if (response.statusCode == 200) { final data = json.decode(response.body); print('Data received from Event Grid: $data'); } else { print('Failed to load data. Status code: ${response.statusCode}'); } } catch (e) { print('Error fetching data: $e'); } } void main() async { await fetchDataFromEventGrid(); }