我是Flutter的新手,我正在尝试调用我的ASP.NET服务器Web API。
从我服务器上的日志中,一切正常,但Android Studio会抛出异常:"无效的标题字段名称"。
以下是dart中的代码:
import 'package:http/http.dart' as http;
...
_getService() async {
String result;
try {
var url = 'http://192.168.1.14:34263/api/Mobile/test/1';
Future<http.Response> response = http.get( url );
result = response.toString();
} catch(exception){
result = exception.toString();
debugPrint(result);
}
...
}
以下是响应标头(通过Chrome获取):
Access-Control-Allow-Headers:accept, authorization, Content-Type
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, PATCH, DELETE
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: WWW-Authenticate
Cache-Control: no-cache
Content-Encoding: deflate
Content-Length:79
Content-Type: application/xml; charset=utf-8
Date: Thu, 08 Mar 2018 01:01:25 GMT
Expires:-1
Pragma:no-cache
Server:MyTestServer
X-Content-Type-Options:NOSNIFF
X-Permitted-Cross-Domain-Policies:master-only
X-SourceFiles:=?UTF-8?BDpcTXlJbmNyZWRpYmxlRHJlc3NpbmdcTXlJbmNyZWRpYmxlRHJlc3NpbmdcTXlJbmNyZWRpYmxlRHJlc3NpbmdcYXBpXE1vYmlsZVxjb3Vjb3VcMQ==?=
X-XSS-Protection:1;mode=block
以下是回答的答案:
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">test</string>
谁能告诉我我做错了什么?
非常感谢
答案 0 :(得分:1)
好的,我终于通过调试代码找到了。
实际上,我的服务器在响应的标题中添加了一系列字段名称(通过Web.config),其中一个字段名称的最后一个字符是空格。 因此,http_parser.dart引发了一个异常,因为空格在标题字段名称中没有授权字符。
Chrome(或任何浏览器)和Postman都没有检测到任何内容。
答案 1 :(得分:0)
我有类似的问题,并且经过大量调试之后
我从nginx中删除了这些标题:
#add_header X−Content−Type−Options nosniff;
#add_header X−Frame−Options SAMEORIGIN;
#add_header X−XSS−Protection 1;
,效果很好。所以最有可能是后端-标头相关问题