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

ASP.NET Core MVC区域间通用功能:存根目录还是各区域复制?

ASP.NET Core MVC 区域通用功能的最佳实践

绝对不要复制相同的控制器和视图到每个区域——遵循DRY(Don't Repeat Yourself)原则,把通用功能放在根目录是更合理的选择,具体处理方式分以下几种情况:

通用控制器的处理

  • 把跨区域复用的控制器放在根目录的Controllers文件夹下。
  • 可以通过路由配置确保区域内的请求能访问到根控制器,或者给控制器添加[Route]特性指定通用路由,比如:
    [Route("[controller]/[action]")]
    public class CommonController : Controller
    {
        public IActionResult SharedAction()
        {
            // 通用逻辑
            return View();
        }
    }
    
    这样不管是/Admin/Common/SharedAction还是/Customer/Common/SharedAction都能匹配到这个动作,区域内的视图也可以直接通过Url.Action("SharedAction", "Common")生成链接。

通用视图的处理

  • 通用布局、部分视图、组件这类复用性高的视图,直接放在根目录的Views/Shared文件夹下即可。ASP.NET Core MVC的视图查找机制会自动优先查找区域内的视图,找不到时会去根目录的Shared文件夹找,无需复制到每个区域。
  • 如果是通用控制器对应的视图,放在根目录Views/[ControllerName]下,区域内的控制器如果需要调用这个视图,可以直接指定路径:
    return View("~/Views/Common/SharedView.cshtml");
    

有细微差异的通用功能

如果通用功能在不同区域需要少量定制,但核心逻辑一致,别复制代码,用继承来处理:

  • 根目录创建基类控制器,实现核心逻辑;区域内的控制器继承这个基类,只重写需要差异化的方法。
  • 视图方面可以用布局继承,或者把通用部分抽成部分视图,区域视图只负责渲染差异化内容。

为什么不要复制?

  • 复制代码会带来维护灾难:后续修改逻辑时,要同步改N份代码,很容易遗漏导致不一致。
  • 违反DRY原则,平白增加项目复杂度和出错概率。
  • 根目录存放通用功能完全符合ASP.NET Core MVC的设计约定,框架本身就支持区域访问根目录的控制器和视图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:50:23