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

ASP.NET Core Web API继承控制器路由匹配失败问题求助

解决ASP.NET Core继承抽象基类后路由无法匹配的问题

问题出在你方法路由模板中的参数名controller与ASP.NET Core路由的内置占位符[controller]重名,导致路由系统解析时出现混淆,无法正确匹配请求。

具体分析

你的抽象基类定义了基础路由[Route("trac/[controller]")],其中[controller]是路由系统的内置占位符,会自动替换为控制器类名的前缀(比如HeadingsController会替换为Headings)。而你在ByController方法上使用了[HttpGet("{controller}")],这里的{controller}被你用作普通路由参数名,但路由系统会将其与内置的[controller]占位符混淆,最终导致路由匹配失败。

解决方案

修改路由参数的名称,避免与内置占位符冲突,同时对应调整方法参数和业务方法的调用:

public class HeadingsController: BaseController<IServices>
{
    // 修改路由模板中的参数名为controllerId,避免冲突
    [HttpGet("{controllerId}")]
    // 明确指定从路由绑定参数(可选,但更清晰)
    public async Task<ActionResult> ByController([FromRoute] int controllerId)
        // 同步修改Service方法的参数传入
        => Ok(await this.Service.ByController(controllerId));
    ...
}

修改后,该接口的完整路由为trac/Headings/{controllerId},请求类似GET trac/Headings/1的URL即可正常匹配并绑定参数。Swagger会自动更新路由显示,测试时使用新的参数名对应的URL即可正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:56:08