我在asp.net论坛上问了这个问题,似乎没有人知道我在说什么。我不确定为什么会这样,但我想我会在这里询问是否有人有一些见解。
当MVC2发布时,它包含一个示例AccountController,它使用可测试的接口和服务包装内置的Membership和FormsAuthentication类。我读了很多关于这一点,并且它被认为是一件好事,因为Membership和FormsAuthentication类不容易测试。
最近,我用最新的(SP1,MVC3,Tools Update等)环境生成了一个新的示例项目,我发现AccountController现在变得更加简单了。 Interfaces和MembershipService以及FormsAuthenticationServices已经不复存在了。该示例现在直接调用Membership和FormsAuthentication类。
我想知道是否有人知道这是什么时候发生的,为什么?可测试的接口不再被认为是正确的吗?是否有技术理由改变这种情况?
我能想到的最好的结果是,这是在更改时发生的一部分,用于在打开网址上传递返回网址时删除可能存在的漏洞。
有什么见解?
答案 0 :(得分:3)
新模型类似于EF的代码优先方法,其中AccountModel
是POCO类。在新API中,不再有抽象,而是直接调用静态方法,例如FormsAuthentication.SetAuthCookie
,使得此代码难以进行单元测试。不是我建议根据你的真实应用程序代码。
而且,是的,他们修复了LogOn
方法中的漏洞,该漏洞未在重定向之前验证返回网址是否为相对网址。
就我个人而言,我建议您使用抽象来削弱控制器逻辑与其依赖关系之间的耦合。这将使代码更容易进行单元测试。
对于我将所有这些域模型传递给视图而不使用视图模型是完全反模式,我从来没有打扰过它们。我只是创建一个空项目并以我的方式做事。我的意思是在默认项目中他们甚至为基督使用ViewBag
!
答案 1 :(得分:0)
使用MVC3工具更新更改了帐户控制器(当他们还包括通过Nuget使用jQuery时)