在我以前,我曾经是一个asp.net webforms开发人员时,我曾经创建过一个基页,在那里我曾经使用过将在应用程序中使用的常用方法和属性,然后每个页面都会继承该页面。
我想知道如何为mvc 4做这个,是否有任何指南,或者只是创建一个基本控制器类并继承该类的所有控制器?
你通常把什么放在基本控制器类中?
谢谢
答案 0 :(得分:4)
我避免使用基本控制器(继承)来解决这个问题,因为它有点气味。您确定您的控制器需要所有这些常用方法和属性吗?至少一些功能可以作为Controller类型的扩展方法实现。
其他功能也可能更适合作为注入控制器的服务。对于需要某些(请求)状态的常用方法,我更喜欢服务方法。
也可能至少有一些功能属于动作过滤器(检查权限,设置一些用户配置文件,处理异常;等)。
作为一个拇指规则,我尽量避免使用我的控制器继承。控制器应该尽可能简单,并且我需要任何实用程序行为,我尝试以上述方式之一封装它。
答案 1 :(得分:1)
这样做并没有多少实践。来自多年网络形式的很多人都是这样想的。
在我们相当大的应用程序中,我们创建了一个BaseController
,但并没有真正看到将常见行为封装到其中的方法。
然而,最终我们通过覆盖基本控制器中的OnException方法
来确定一些常用代码来记录异常所以我认为你应该去:如果你看到可以封装的代码,那么。您可以在基本控制器中创建私有方法,但您无法在基本控制器中创建公共操作方法。您需要将代码封装在受保护的方法中,然后您需要在具体控制器中使用单独的Action方法。