为何ASP.NET Core MVC中控制器类名无需以Controller为后缀?
ASP.NET Core 不再强制控制器类名带Controller后缀的原因
我从事ASP.NET MVC开发已逾10年,一直知晓控制器类名需以Controller为后缀的约定,在ASP.NET MVC 5及更早版本中这是硬性限制。
某天我看到同事在ASP.NET Core 6中这样编写控制器:
using Microsoft.AspNetCore.Mvc; namespace WebApplication2.Controllers; public class Home : Controller { private readonly ILogger<Home> _logger; public Home(ILogger<Home> logger) { _logger = logger; } public IActionResult Index() { return View(); } }
我十分惊讶,不敢相信有人会这样写控制器代码。随后查阅官方文档得知,控制器是可实例化的公共类,需满足以下至少一个条件:
控制器是可实例化的类(通常为公共类),需满足以下至少一个条件:
- 类名以Controller为后缀。
- 继承自类名以Controller为后缀的类。
- 类上应用了[Controller]特性。
这时我才知道Controller后缀并非必须,只是推荐命名规则。不带该后缀可能会带来一些弊端,比如路由匹配歧义、与其他类命名冲突等问题,我也了解到早期ASP.NET MVC中曾因这类无后缀控制器引发过识别问题。
我始终认为给控制器命名时加上Controller后缀是最佳实践,想了解ASP.NET Core团队为何决定不再强制要求控制器类名以Controller为后缀?
内容的提问来源于stack exchange,提问作者Will Huang
相关产品推荐
相关产品推荐

