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

Blazor传递订单号调用API失败:无JSON令牌错误排查

问题分析与修复方案

核心问题:路由不匹配导致API请求未被正确处理

你的API断点没触发、前端报“输入不包含任何JSON令牌”,本质是请求URL和API路由规则不匹配——API根本没接收到请求,返回的大概率是404页面(非JSON格式),所以GetFromJsonAsync解析失败。

具体问题点及修复:

  1. API路由与请求路径不匹配

    • API控制器的路由前缀是api/application/workorder,但前端请求路径是api/workorder/{订单号},缺少application层级,导致请求找不到对应接口。
    • 同时,HttpGet方法未定义路由参数模板,无法从URL中捕获orderNumber。
  2. 修复后的API控制器代码
    修改HttpGet特性,添加参数路由模板,确保能匹配带订单号的请求:

    [ApiController]
    [Route("api/application/workorder")]
    [Tags("AM Application Data")]
    public class WorkorderController : ControllerBase
    {
        private readonly IMediator _mediator;
    
        public WorkorderController(IMediator mediator)
        {
            _mediator = mediator;
        }
    
        // 新增路由参数模板 {orderNumber},明确从路由捕获参数
        [HttpGet("{orderNumber}")]
        public async Task<IActionResult> Get([FromRoute] string orderNumber)
        {
            var request = new Workorder.Request()
            {
                Name = "Work Order",
                OrderNumber = orderNumber,
            };
            var response = await _mediator.Send(request);
            return Ok(response);
        }
    }
    
  3. 修复前端请求路径
    前端请求路径需和API路由前缀对齐,加上application层级;同时建议对订单号做URL编码(当前示例的_和-是URL安全字符,但编码能避免后续特殊字符引发的问题):

    private async Task<WorkorderDTO> Lookup()
    {
        var encodedOrderNumber = Uri.EscapeDataString(_model.OrderNumber);
        var path = $"api/application/workorder/{encodedOrderNumber}";
        var response = await _apiService.GetFromJsonAsync<WorkorderDTO>(path, CancellationToken.None);
        return response;
    }
    

额外验证点

  • 确认本地请求URL应为:https://localhost:44318/api/application/workorder/ABC_A14Y9-TS78,与修改后的路由规则匹配。
  • 如果API仍未触发断点,检查API服务启动端口是否为44318,且前端请求的域名/端口与API一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 10:41:11