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

使用.NET MAUI与Web API开发测验应用时获取题目失败求助

解决.NET MAUI中无法通过测验ID获取对应题目的问题

排查步骤与解决方案

1. 修正导航参数与QueryProperty的匹配问题

检查导航参数名和QueryProperty接收名称的一致性,虽然MAUI导航参数默认不区分大小写,但统一命名可避免潜在问题:

public async Task Navigation()
{
    // 先验证测验ID是否有效
    if (QuizesVM?.Id <= 0)
    {
        await Shell.Current.DisplayAlert("提示", "未选中有效的测验", "确定");
        return;
    }
    // 保持参数名与QueryProperty接收名称一致
    await Shell.Current.GoToAsync($"{nameof(QuizDisplay)}?QuizId={QuizesVM.Id}");
}

2. 规范属性Setter中的异步方法调用

在QuizId的setter中直接调用异步方法属于async void调用,易导致异常无法捕获或UI线程混乱,改为通过RelayCommand触发:

private int quizId;
public int QuizId
{
    get => quizId;
    set
    {
        // 仅当属性值变化且ID有效时触发加载
        if (SetProperty(ref quizId, value) && value > 0)
        {
            GetQuizQuestionsCommand.Execute(null);
        }
    }
}

3. 修复Service返回null引发的空引用异常

当API返回非成功状态码时,原代码返回null,后续遍历会触发空引用异常,改为抛出明确异常并确保返回非null集合:

public async Task<List<Question>> LoadQuizData(int quizId)
{
    var requestUrl = $"{baseUrl}/GetQuestionsPerQuiz/{quizId}";
    var response = await _httpClient.GetAsync(requestUrl);
  
    // 非成功状态直接抛出异常,暴露具体错误
    response.EnsureSuccessStatusCode();
    
    var content = await response.Content.ReadAsStringAsync();
    // 反序列化失败或返回空时,返回空集合而非null
    return JsonConvert.DeserializeObject<List<Question>>(content) ?? new List<Question>();
}

4. 验证API端点有效性

  • 直接在浏览器/Postman中调用{baseUrl}/GetQuestionsPerQuiz/{有效QuizId},确认返回正确的JSON格式数据
  • 检查baseUrl是否包含正确的协议(http/https)和端口
  • 确认Web API的GetQuestionsPerQuiz接口正确接收quizId参数并返回预期数据

5. 添加日志辅助排查

在关键节点添加日志,定位问题根源:

// 导航方法中
Console.WriteLine($"当前选中测验ID: {QuizesVM.Id}");

// QuizDisplayViewModel的setter中
Console.WriteLine($"接收到的测验ID: {value}");

// LoadQuizData中
Console.WriteLine($"请求API地址: {requestUrl}");
Console.WriteLine($"API响应状态码: {response.StatusCode}");

总结

优先解决空引用异常和异步调用规范问题,再验证导航参数与API端点的正确性,即可解决「Unable to get Quiz Questions」错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:07:04