.NET Core最小API设置可选路由参数后访问返回404的原因
问题原因
.NET Core 最小API的路由匹配有明确规则:仅在路由模板的参数后缀加?声明可选,无法让缺省该参数的路径命中端点,核心问题是:
- 路由模板里标记为可选的参数,必须同步给对应委托的入参设置默认值,否则路由系统仍会将该参数判定为必填,直接拒绝匹配缺失参数的请求
- 你当前代码中
fundCode为string类型,没有配置默认值,访问/api/fund时路由找不到匹配的端点,自然返回404。
修复方式
给fundCode入参设置默认值即可,修改后代码:
app.MapGet("/api/fund/{fundCode?}", ([FromServices] IMediator mediator, string fundCode = null) => mediator.Send(new GetFundsQuery(fundCode)));
修改后两类请求都能正常命中接口:
- 请求
https://localhost:7147/api/fund时,fundCode取值为null - 请求
https://localhost:7147/api/fund/xxx(xxx为具体基金代码)时,fundCode取值为传入的路径参数值
补充规则:可选路由参数只能放在路由模板的末尾位置,如果放在路由中间段,即使加了
?、配置了默认值也无法正常匹配。
内容的提问来源于stack exchange,提问作者Ehsan Akbar
相关产品推荐
相关产品推荐

