使用基本控制器来完成整个asp.net MVC 4项目

时间:2013-03-14 08:48:41

标签: .net asp.net-mvc inheritance

我正在考虑为我正在使用的整个MVC 4项目使用基本控制器。我在网上发现了相互矛盾的观点,并不确定它是否违反最佳做法,或者仅仅是个人偏好。

这是一个表示dont do it

的stackoverflow帖子

Here是一篇帖子,展示了如何做到这一点,就像它没有任何有害影响一样。 Herehere他们也解释了它的用法,没有人真正指出这是不好的做法,或者可能会导致任何问题。

那么在MVC 4项目中使用几个基本控制器的观点究竟是什么呢?好?坏?

修改

我还想指出,我使用基本控制器的直接目标是,我可以在一个控制器中完成授权,这样所有控制器都不需要具有Authorize属性。我将为每个角色创建单独的基本控制器。由于角色永远不会改变,我将永远不需要为另一个角色创建另一个基本控制器。您如何看待这种设计控制器的方式?

感谢您的时间。

2 个答案:

答案 0 :(得分:4)

恕我直言,你所引用的帖子是绝对正确的,但这并不是不使用基本控制器的理由。事实上,由于商品原因,我在一些ASP.NET MVC应用程序中使用了基本控制器。

这不再可取:

让基本控制器一次应用[Authorize]属性是一种常见做法,我没有看到任何错误。

从MVC3开始,你可以注册这样的全局动作过滤器:

GlobalFilters.Filters.Add(new MyAuthorizeAttribute());

答案 1 :(得分:3)

在处理覆盖User校长之类的事情之前,我曾使用过基本控制器(请参阅此处有关我的旧问题,描述这个想法:Is this Custom Principal in Base Controller ASP.NET MVC 3 terribly inefficient?)。

老实说,我想不出更好的方法,所以我觉得在这种情况下使用基本控制器可能是一件好事。

我可能不会为不同的授权角色使用不同的基本控制器,因为它只是用[Authorize(Roles="whatever")]来装饰控制器相当简单(而且代码较少),并且更容易看到确切的发生了什么。

可能值得考虑自定义AuthorizeAttribute