WebAPI端点可达但所有传入参数均为空的问题求助
问题根因
你定义的WebAPI接口通过[HttpGet]特性配置了路由规则,要求auditReviewId、actioneeId、entries三个参数从URL路径中提取,但你调用接口时将所有参数拼接在了查询字符串(?之后的部分),路由匹配阶段无法从路径中获取到对应参数,因此接口接收到的都是参数的默认空值。
解决办法
你可以选择任意一种适配方案解决该问题:
方案1:调整接口定义,允许参数从查询字符串读取
两种修改方式二选一即可:// 移除路由模板中的路径参数,默认会自动匹配查询字符串的同名参数 [HttpGet("GetAuditReviewActions")] public IEnumerable<AuditReviewActionDto> GetAuditReviewActions(int auditReviewId, int? actioneeId = null, int? entries = null)或者
// 保留原有路由模板,显式标注参数从查询字符串读取 [HttpGet("/{auditReviewId}/{actioneeId?}/{entries?}")] public IEnumerable<AuditReviewActionDto> GetAuditReviewActions([FromQuery] int auditReviewId, [FromQuery] int? actioneeId = null, [FromQuery] int? entries = null)方案2:调整接口调用逻辑,按路由规则拼接路径参数
如果你不想修改现有接口定义,就把调用时的参数拼接方式改为路径形式,注意可选参数为空时不需要拼接:var client = LocalHttpClient.CreateClient("UarBase"); var url = $"api/AuditDashboard/GetAuditReviewActions/{logId}"; if (SelectedKey != null) url += $"/{SelectedKey}"; if (Limit != null) url += $"/{Limit}"; var response = client.GetAsync(url).Result;
额外注意
直接调用.Result同步等待异步请求存在线程死锁风险,非特殊场景推荐使用await异步等待请求返回
内容的提问来源于stack exchange,提问作者bilpor
相关产品推荐
相关产品推荐

