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

AspNet Core 2.0 WebApi端点传入decimal和int时无法命中,报404

解决Asp.Net Core 2.0 Web API 404错误问题

我来帮你排查这个404的问题,根源出在你的路由配置上,我们一步步拆解分析:

问题核心原因

你的控制器标注了[Route("api/[controller]")],这意味着控制器的基础路由是api/trader。但FindTraders方法上的路由是[Route("/find/{category:int}/{latitude:decimal}/{longitude:decimal}/")]——注意这个路由开头带有斜杠/,在ASP.NET Core的路由规则里,带开头斜杠的路由会完全覆盖控制器的路由前缀,而不是和前缀拼接。

所以这个方法的实际可访问路由是/find/3/41.14271100000...,和你发起的/api/trader/find/3/41.14271100000...路径不匹配,自然就返回404了。

两种可行的解决方案

方式一:去掉端点路由的开头斜杠

把方法上的路由改成不带开头斜杠的形式,这样会自动和控制器的路由前缀拼接,形成你期望的路径:

[HttpGet]
[ProducesResponseType(typeof(IList<Trader>), 200)]
// 去掉开头斜杠,路由将拼接为 api/trader/find/...
[Route("find/{category:int}/{latitude:decimal}/{longitude:decimal}/")]
public IActionResult FindTraders(int category, decimal latitude, decimal longitude) { }

方式二:指定完整的路由路径(保留开头斜杠)

如果你想明确指定完整路径,可以把控制器前缀也包含到方法的路由定义里:

[HttpGet]
[ProducesResponseType(typeof(IList<Trader>), 200)]
// 直接写完整路由,完全匹配你的请求路径
[Route("/api/trader/find/{category:int}/{latitude:decimal}/{longitude:decimal}/")]
public IActionResult FindTraders(int category, decimal latitude, decimal longitude) { }

两种修改方式都能让你的请求http://localhost:59405/api/trader/find/3/41.14271100000...成功匹配到对应的端点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:56:22