向控制器传递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
相关产品推荐
相关产品推荐

