json - 如何在 Dart Server 中为 request.response 设置内容类型?
问题描述
我设置了我的飞镖服务器,如下所示。我可以从 Flutter Mobile 应用程序发送数据并从 Dart Server 接收数据。
如果 dart 服务器中的请求方法是 GET,我连接到 tcp 套接字并获取一些数据。我需要发送到 Flutter 应用程序的数据必须是 JSON 格式。
我尝试将 request.response.headers.contentType 设置为 json,但我不断收到一条错误消息,提示 HttpException: HTTP headers is not mutable。
代码部分:
var _secureResponse = {};
_secureResponse[“Data”] = "$_returningServerData";
_secureResult = json.encode(_secureResponse);
request.response.headers.contentType = new ContentType("application", "json", charset: "utf-8");
request.response.write(_secureResult);
request.response.close();
错误:
- 无效的
- 未处理的异常:HttpException:HTTP 标头不可变
- HttpHeaders._checkMutable (dart:_http/http_headers.dart:447:20)
- HttpHeaders.contentType= (dart:_http/http_headers.dart:267:5)
服务器代码:
Future main() async {
final HttpServer server = await HttpServer.bind("127.0.0.1", 8080);
server.listen((HttpRequest request) async {
print(request.headers.contentType);
try {
if (request.method == "GET") {
String _requestData = ......
Socket _socket = await Socket.connect('192.168.22.129', 3000);
// READ FROM CSERVER
_socket.listen((List<int> event) {
_reply = new String.fromCharCodes(event).trim();
});
// WRITE TO SERVER
_socket.add(utf8.encode('$_requestData\r\n'));
// wait 1 seconds
await Future.delayed(Duration(milliseconds: 1000));
_socket.close();
var _secureResponse = {};
_secureResponse["Data"] = "$_reply";
_secureResult = json.encode(_secureResponse);
request.response.headers.contentType = new
ContentType("application", "json", charset: "utf-8");
request.response.write(_secureResult);
request.response.close();
}
} finally {
var _secureResponse = {};
_secureResponse["Data"] = "ERROR";
_secureResult = json.encode(_secureResponse);
request.response.headers.contentType = new
ContentType("application", "json", charset: "utf-8");
request.response.write(_secureResult);
request.response.close();
}
});
}
解决方案
见https://api.dartlang.org/stable/2.1.0/dart-io/HttpHeaders-class.html
你有没有尝试过类似的东西
request.headers.set(HttpHeaders.cacheControlHeader,
'max-age=3600, must-revalidate');
如果您在 Dart 中构建服务器,我建议您使用package:shelf - 它更加用户友好。
推荐阅读
- python - 遍历字典列表的大 O 时间复杂度
- wso2-am - WSO2 api 管理器 SSLPeerUnverifiedException:对等体未通过身份验证
- android - 如何在 Jetpack Compose 中的现有 LazyColumn 之上添加 CircularProgressIndicator?
- database - 将烧瓶 Web 应用程序连接到 vm 中的数据库
- multithreading - 使用 Kotlin 中不同线程的结果更新列表
- vue.js - Ionic Vue 和 AR.js
- c# - AWS 弹性 beanstalk Linux 的 .NET 中的 .ebextensions 文件夹在哪里
- java - 如何恢复丢失的 NetBeans 类?
- android - Kotlin 无法更改按钮属性
- react-native - React native:为数组中的每个项目设置坐标