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

向控制器传递DateTime变量时触发“<是无效值开头”Json异常问题

问题根因分析

'<' is an invalid start of a value报错的本质是后端返回的不是预期的JSON格式数据,而是HTML页面(通常是404、500等错误的响应页,HTML代码以<开头,触发JSON解析失败)。

该问题的触发原因:你直接把DateTime类型拼接到请求URL时,默认ToString输出的格式包含斜杠(例如2024/6/15),会导致实际请求URL变成Prediction/2024/6/15,和控制器定义的[HttpGet("{date}")]单参数路由规则不匹配,后端匹配不到接口返回404错误页,前端解析错误页内容就会抛出该异常。你之前尝试转字符串未解决,大概率是转换后的字符串仍包含/等会破坏路由结构的特殊字符,没有解决URL匹配失败的核心问题。

修复方案
  • 发起请求时将DateTime格式化为无特殊符号的标准日期字符串,避免破坏路由结构:
private async Task InitPrediction()
{
    // 指定日期格式为短横线分隔,不会破坏路由结构
    predictedInfo = await http.GetFromJsonAsync<Dictionary<string, int>>($"Prediction/{selectedDate.ToString("yyyy-MM-dd")}");
    Navigation.NavigateTo("/prediction");
}
  • 可选增强:给控制器路由参数加上DateTime类型约束,避免格式错乱的参数进入接口:
[HttpGet("{date:datetime}")]
public async Task<ActionResult<Dictionary<string, int>>> GetProjects(DateTime date)
{
    // 原有逻辑保持不变
    int total_projects_per_company = 0;
    int users_per_project_sum = 0;
    Dictionary<string, int> d = new Dictionary<string, int>();
    // calculation code...
    d.Add("users", users_per_project_sum);
    d.Add("projects", total_projects_per_company);
    return d;
}
  • 调试验证:如果修改后仍有问题,可打开浏览器开发者工具的网络面板,查看实际发起的请求URL、响应状态码和响应内容,确认是否还有路由匹配错误或者接口内部抛出异常的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:45:04