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
相关产品推荐
相关产品推荐

