扩展MVC Controller类,没有版本依赖性

时间:2012-06-14 20:48:25

标签: asp.net-mvc dll

在我工作的地方,我们使用WebForms为内部Web应用程序提供了自定义安全/身份验证机制。现在我们正在ASP.NET MVC 3中进行开发,并希望扩展Controller类来支持这一点,就像我们对WebForm的Page类一样。然后我们将其打包成一个自定义共享的DLL。

我想知道在与未来版本的MVC的兼容性方面这是多么安全。 如果ASP.NET MVC 4.0明年推出,我们的自定义控制器类(引用ASP.NET MVC 3.0 Controller类)仍然可以在MVC 4.0应用程序中运行吗?

有没有办法以某种方式扩展Controller而不依赖于特定的MVC版本?


与此不重复: Extending Asp.NET MVC3 Controller Class

2 个答案:

答案 0 :(得分:1)

问题是从“Controller”类继承,首先需要添加对特定版本的Sytem.Web.Mvc的引用。

每个版本的ASP.NET MVC都有自己的DLL。您将无法在MVC 4项目中使用为ASP.NET MVC3设计的客户DLL。

现在,你可以创建一个来自Controller的inheirts并将它包含在你的ASP.NET MVC项目中,然后当你的项目版本发生变化时,将引用“Controller”,但这仅仅是因为你的项目引用了版本

答案 1 :(得分:0)

不完全是您所要求的,但如果您使用的是自定义安全/身份验证机制,则最好覆盖控制对所有控制器的访问权限的AuthorizeAttribute。

还有很多用于自定义身份验证的示例。从自定义控制器派生可能导致潜在的安全问题,有人忘记添加基类 - 将AuthorizeAttribute应用于应用程序启动中的所有控制器是正常的。

有关此方法的详细信息,请参阅here

对于非安全相关的共享方法,您可以在IController上实现这些扩展方法,而不是扩展基类本身,除非您特别需要覆盖控制器基类中的任何内容。