You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用无法与.NET Core Web API建立HTTP连接求助

Flutter无法连接.NET Core Web API登录接口问题排查与解决

问题背景

开发.NET Core Web API后端+Flutter前端应用时,后端API正常运行,但Flutter端无法建立HTTP连接完成登录:

  • 使用localhost/127.0.0.1时触发错误:OSError (OS Error: Connection refused, errno = 111)
  • 使用10.0.2.2时无报错但响应体为空
  • 已尝试切换http/https协议、防火墙放行端口、更换地址,均未解决

现有实现代码

登录请求模型

class LoginRequest {
  final String usernameOrEmail;
  final String password;

  LoginRequest({required this.usernameOrEmail, required this.password});

  Map<String, dynamic> toJson() {
    return {
      'usernameOrEmail': usernameOrEmail,
      'password': password,
    };
  }
}

用户服务抽象接口

import 'package:frontend/requests/login_request.dart';

abstract class UserService {
  Future<bool> login(LoginRequest request);
}

服务实现类

import 'dart:convert';

import 'package:frontend/requests/login_request.dart';
import 'package:frontend/services/abstractions/user_service.dart';
import 'package:http/http.dart' as http;

class UserServiceImpl implements UserService {
  @override
  Future<bool> login(LoginRequest request) async {
    try {
      var response = await http.post(
          Uri.http("127.0.0.1:5224", "/api/User/login"),
          body: jsonEncode(request.toJson()));
      var body = jsonDecode(response.body);
      return true;
    } catch (e) {
      return false;
    }
  }
}

排查与解决步骤

1. 修正.NET Core API绑定地址

打开后端launchSettings.json,修改applicationUrl让API绑定所有网卡(而非仅本地回环地址),确保外部设备可访问:

"applicationUrl": "http://0.0.0.0:5224;https://0.0.0.0:7224"

修改后重启后端服务生效。

2. 补全Flutter请求头

当前请求缺少Content-Type: application/json头,后端无法正确解析JSON参数,修改服务实现:

@override
Future<bool> login(LoginRequest request) async {
  try {
    // 替换为你的主机局域网IP(如192.168.1.100),模拟器可用10.0.2.2
    var response = await http.post(
        Uri.http("192.168.1.100:5224", "/api/User/login"),
        headers: {
          'Content-Type': 'application/json', // 必须添加的JSON请求头
        },
        body: jsonEncode(request.toJson()));
    
    // 打印响应信息用于排查
    print('状态码: ${response.statusCode}');
    print('响应体: ${response.body}');
    
    return response.statusCode == 200;
  } catch (e) {
    print('请求错误: $e');
    return false;
  }
}

3. 根据运行环境选择正确地址

  • Android模拟器:用10.0.2.2映射主机127.0.0.1,需确保后端绑定127.0.0.1或0.0.0.0
  • iOS模拟器:直接使用localhost或主机局域网IP
  • 真机测试:必须使用主机的局域网IP(如192.168.x.x),且设备与主机在同一WiFi网络

4. 验证API本身可用性

用Postman或浏览器向后端地址发送POST请求,携带JSON参数:

{
  "usernameOrEmail": "test",
  "password": "test123"
}

确认API能正常返回响应,排除后端逻辑问题。

5. 检查防火墙与网络规则

  • 放行Windows防火墙中.NET Core服务的5224端口
  • 真机测试时,临时关闭主机防火墙或添加允许外部访问的规则

内容的提问来源于stack exchange,提问作者Vladimir99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 22:30:16