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

.NET 6路由中间传递空参数失败(404)求助

解决.NET 6路由中间传递空参数的404问题

你遇到的问题是因为ASP.NET Core(包括.NET 6)的路由系统默认会合并连续的斜杠,导致/WeatherForecast/1//1被处理成/WeatherForecast/1/1,无法匹配你的路由模板{id}/{p1?}/{p2?},而旧版.NET Framework的路由不会做这个合并,所以之前能正常运行。

下面给你几个解决办法:

1. 禁用路由的斜杠合并功能

在Program.cs里添加路由配置,关闭连续斜杠的合并:

builder.Services.Configure<RouteOptions>(options =>
{
    options.SuppressMergeSlashes = true;
});

这样路由就会保留连续的斜杠,/WeatherForecast/1//1就能正确匹配到id=1、p1=null(会使用默认值0)、p2=1的参数组合。

2. 使用查询参数传递可选参数

更推荐这种符合REST规范的方式,把中间的空参数换成查询字符串,比如:
https://localhost:7242/WeatherForecast/1?p2=1
你的代码不需要修改,因为p1和p2已经是可选参数,会自动绑定查询字符串的值,这样既避免了路由匹配问题,URL也更规范。

3. 调整路由模板(可选)

如果一定要用路径参数的形式,可以修改路由模板,允许空路径段匹配:

[HttpGet("{id}/{p1:regex(^$|\\d+)?}/{p2?}")]

不过这种方式需要编写正则表达式匹配空值或数字,不如前两种方法简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:58:28