如何使用http get 请求从事件网格命名空间读取

问题描述 投票:0回答:1

我目前在 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();
}

运行命令。收到以下警告和错误 enter image description here

flutter azure dart http azure-eventgrid
1个回答
0
投票
dart pub global activate flutter_cors

上述脚本用于禁用和重新启用 Flutter 的 Chrome 实例的 CORS 检查。

注:

此脚本仅禁用本地测试的 CORS 检查,不会解决生产中的 CORS 问题。请不要就生产 CORS 问题寻求帮助,因为它们不属于本项目的范围。

如果您在本地开发过程中遇到 CORS 问题,请使用

flutter_cors
在 Flutter 用于 Web 开发的 Chrome 实例中禁用 CORS 检查。另外,请确保根据加载的结束范围调整Networking中的Address range。

enter image description here

下面的代码旨在发出从 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(); } 

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.