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

MAUI调用ASP.NET API无返回值且程序冻结问题求助

问题

开发ASP.NET后端搭配MAUI前端的项目,上周MAUI应用还能正常调用API接口,但今日发起GET请求时无法获取返回值,甚至会导致程序冻结。已确认以下信息:

  • ASP.NET的Swagger UI可正常发起该GET请求
  • 浏览器访问https://localhost:5001/api/User能正常显示JSON数据
  • 在MAUI的API调用处设置断点,程序可执行到该位置,但返回的json变量值为null
  • 当前在Windows平台调试,知晓Android平台的localhost地址不同

相关代码:

MAUI端RestService类

public class RestService
{
    private HttpClient client;
    public RestService()
    {
        client = new HttpClient();
    }

    public async Task<List<User>> GetUsersAsync()
    {
        // json变量值为null
        var json = await client.GetStringAsync("https://localhost:5001/api/User");
        var user = JsonConvert.DeserializeObject<List<User>>(json);

        return user;
    }
}

ASP.NET端控制器代码

[HttpGet]
[ProducesResponseType(200, Type = typeof(IEnumerable<User>))]
public IActionResult GetUsers()
{
    var users =  _userInterface.GetUsers();

    return Ok(users);
}

ASP.NET端Repository方法

public ICollection<User> GetUsers()
{
    return _dataContext.Users.ToList();
}
排查与解决建议
  1. 排查死锁问题
    大概率是调用GetUsersAsync时使用了.Result或.Wait()同步阻塞,导致MAUI UI线程死锁。确保调用方始终用await异步调用:

    // 错误写法(会引发死锁)
    var users = restService.GetUsersAsync().Result;
    // 正确写法
    var users = await restService.GetUsersAsync();
    
  2. 修复HttpClient证书信任问题
    Windows平台MAUI默认可能不信任本地ASP.NET的自签HTTPS证书,导致请求无法完成。开发环境可临时添加证书忽略逻辑:

    public RestService()
    {
        var handler = new HttpClientHandler();
        // 仅开发环境使用,生产环境需移除
        handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;
        client = new HttpClient(handler);
    }
    

    也可以手动将本地HTTPS证书导入到MAUI应用的信任存储区。

  3. 添加异常捕获定位问题
    当前代码未处理请求异常,GetStringAsync可能抛出连接超时、证书错误等异常但未被捕获,导致程序无响应。添加异常日志:

    public async Task<List<User>> GetUsersAsync()
    {
        try
        {
            var json = await client.GetStringAsync("https://localhost:5001/api/User");
            return JsonConvert.DeserializeObject<List<User>>(json);
        }
        catch (Exception ex)
        {
            Debug.WriteLine($"请求失败:{ex.Message}\n{ex.StackTrace}");
            return null;
        }
    }
    

    通过输出窗口的异常信息,直接定位具体故障原因。

  4. 验证API地址可达性
    尝试改用HTTP端口(如http://localhost:5000/api/User)测试,排除HTTPS证书干扰;同时检查防火墙是否阻止MAUI应用访问5001端口。

  5. 检查序列化兼容性
    确认MAUI端与ASP.NET端的User类属性完全匹配(名称、类型、访问修饰符一致),属性不匹配会导致反序列化返回null或空列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:55:33