如何在 Dart 服务器中为 request.response 设置 content-type?
How to set content-type for request.response in Dart Server?
我设置我的飞镖服务器如下所示。我可以从 Flutter Mobile 应用程序发送数据并从 Dart 服务器接收数据。
如果在 dart 服务器中请求方法是 GET 我连接到 tcp 套接字获取一些数据。我需要发送到 Flutter 应用程序的数据必须采用 JSON 格式。
我尝试将 request.response.headers.contentType 设置为 json,但我不断收到一条错误消息,提示 HttpException: HTTP headers 不可变。
代码部分:
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 headers 不可变
- HttpHeaders._checkMutable (飞镖:_http/http_headers.dart:447:20)
- HttpHeaders.contentType= (飞镖:_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 – 它对用户更友好。
我设置我的飞镖服务器如下所示。我可以从 Flutter Mobile 应用程序发送数据并从 Dart 服务器接收数据。
如果在 dart 服务器中请求方法是 GET 我连接到 tcp 套接字获取一些数据。我需要发送到 Flutter 应用程序的数据必须采用 JSON 格式。
我尝试将 request.response.headers.contentType 设置为 json,但我不断收到一条错误消息,提示 HttpException: HTTP headers 不可变。
代码部分:
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 headers 不可变
- HttpHeaders._checkMutable (飞镖:_http/http_headers.dart:447:20)
- HttpHeaders.contentType= (飞镖:_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 – 它对用户更友好。