Flutter连接本地C# API遇超时/连接拒绝问题求助
排查Flutter连接本地C# API的连接拒绝问题
以下是针对你遇到的问题的具体排查步骤和解决方案:
1. 确认C# API的绑定地址
Postman能访问但Flutter不行,大概率是API仅绑定了localhost,未监听局域网私有IP或所有网卡:
- 修改API的Kestrel配置,在
Program.cs中添加:builder.WebHost.ConfigureKestrel(options => { // 监听所有网卡的指定端口,或替换为你的私有IP(如192.168.1.100) options.ListenAnyIP(5000); }); - 或者修改
Properties/launchSettings.json中的applicationUrl,将localhost替换为0.0.0.0或你的私有IP:"applicationUrl": "http://0.0.0.0:5000;https://0.0.0.0:5001"
修改后重启API服务。
2. 验证设备网络连通性
- 确保运行Flutter的设备(手机/模拟器)和API所在电脑处于同一局域网,检查两者IP网段是否一致(比如都是192.168.1.x)。
- 在Flutter设备的浏览器中直接访问API的私有IP+端口+接口路径(如
http://192.168.1.100:5000/api/test),如果无法访问,优先解决网络连通性问题。
3. 检查Flutter请求配置
- 确认请求URL完全正确:私有IP、端口、接口路径需和Postman中的一致,避免拼写错误。示例:
final response = await http.get( Uri.parse('http://192.168.1.100:5000/api/your-endpoint'), // 可适当延长超时时间排除短超时问题 timeout: const Duration(seconds: 15), ); - 如果API启用了HTTPS,需确保Flutter端信任自签名证书(若使用自签证书),或暂时改用HTTP测试。
4. 排查第三方安全软件拦截
即使关闭了系统防火墙,第三方杀毒软件、安全工具(如360、腾讯电脑管家等)的内置防火墙可能仍在拦截请求,建议暂时关闭这类软件后重试。
5. 模拟器特殊场景处理
- 若使用Android模拟器,除私有IP外,也可尝试用
10.0.2.2映射电脑的localhost,但前提是API已绑定0.0.0.0。 - 用模拟器自带浏览器测试API地址,确认模拟器能正常访问局域网资源。
6. 检查CORS配置(可选)
Postman不受CORS限制,但Flutter作为客户端可能触发拦截(可能间接导致连接异常)。在C# API中配置允许跨域:
builder.Services.AddCors(options => { options.AddPolicy("AllowLocalFlutter", policy => { policy.WithOrigins("http://localhost:8080", "http://192.168.1.x:8080") // Flutter设备IP或端口 .AllowAnyMethod() .AllowAnyHeader(); }); }); // 在中间件链中添加CORS(需在UseRouting之后,UseAuthorization之前) app.UseCors("AllowLocalFlutter");
内容的提问来源于stack exchange,提问作者ESvi3
相关产品推荐
相关产品推荐

