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

为何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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:40:54