如果我写body:data我得到错误类型’_InternallinkedHashMap< String,dynamic>‘不是类型转换中类型’String’的子类型
这是数据对象
var match = { "homeTeam": {"team": "Team A"},"awayTeam": {"team": "Team B"}};
我的要求
var response = await post(Uri.parse(url),headers: { "Accept": "application/Json","Content-Type": "application/x-www-form-urlencoded" },body: match,enCoding: EnCoding.getByname("utf-8"));解决方法 您需要添加三个额外步骤:
首先,您需要将Json映射转换为String(使用Json.encode)
然后,如果要将其作为application / x-www-form-urlencoded发送,则需要对其进行Uri编码.
最后,您需要为要发布名称的参数指定.
例如(注意,这是使用dart:io httpClIEnt,但它基本相同):
Future<httpClIEntResponse> foo() async { Map<String,dynamic> JsonMap = { 'homeTeam': {'team': 'Team A'},'awayTeam': {'team': 'Team B'},}; String JsonString = Json.encode(JsonMap); // encode map to Json String paramname = 'param'; // give the post param a name String formBody = paramname + '=' + Uri.encodequeryComponent(JsonString); List<int> bodyBytes = utf8.encode(formBody); // utf8 encode httpClIEntRequest request = await _httpClIEnt.post(_host,_port,'/a/b/c'); // it's polite to send the body length to the server request.headers.set('Content-Length',bodyBytes.length.toString()); // todo add other headers here request.add(bodyBytes); return await request.close(); }
以上是针对dart:io版本(当然,你可以在Flutter中使用)
如果您想坚持使用该软件包:http版本,那么您需要稍微调整一下Map. body必须是Map< String,String>.您需要确定您想要的POST参数.你想要两个:homeTeam和awayTeam吗?或者一个,比如,teamJson?
这段代码
Map<String,String> body = { 'name': 'doodle','color': 'blue','homeTeam': Json.encode( {'team': 'Team A'},),'awayTeam': Json.encode( {'team': 'Team B'},}; Response r = await post( url,body: body,);
在线上产生这个
name=doodle&color=blue&homeTeam=%7B%22team%22%3A%22Team+A%22%7D&awayTeam=%7B%22team%22%3A%22Team+B%22%7D
或者,这个
Map<String,'teamJson': Json.encode({ 'homeTeam': {'team': 'Team A'},}),);
在线上产生这个
name=doodle&color=blue&teamJson=%7B%22homeTeam%22%3A%7B%22team%22%3A%22Team+A%22%7D%2C%22awayTeam%22%3A%7B%22team%22%3A%22Team+B%22%7D%7D
包:http客户端负责:编码Uri.encodequeryComponent,utf8编码(请注意,这是默认值,因此无需指定)并在Content-Length标头中发送长度.您仍然必须执行Json编码.
总结以上是内存溢出为你收集整理的dart – 如何在flutter中使用url编码的主体发出HTTP POST请求?全部内容,希望文章能够帮你解决dart – 如何在flutter中使用url编码的主体发出HTTP POST请求?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)