【问题标题】:Migrating from ASP.NET WebForms to ASP.NET MVC 4从 ASP.NET WebForms 迁移到 ASP.NET MVC 4
【发布时间】:2013-08-13 09:26:22
【问题描述】:

我是一名实习生,我被分配了一个项目,我必须重新设计他们的客户支持网页。我是 ASP 新手,所以他们要求我将代码迁移到 MVC 4,以便我为以后的项目学习它。

该网页使用自定义类进行表单身份验证,扩展MembershipProviderRoleProvider,并使用直接在.aspx 文件中定义的asp:SqlDataSource 查询显示数据。

据我所知,MVC 的重点是将前端(视图)、控制器和后端(模型、数据库访问)分开。我在这方面取得了一些进展,但我在身份验证方面遇到了问题。我已经设法使用显式的MembershipProviderRoleProvider 初始化来启用登录(这应该按照Web.config 中的配置自动完成)。通过调用MembershipProvider.ValidateUser()FormsAuthentication.RedirectFromLoginPage(),我会验证用户详细信息并存储他们的用户名以在导航时保留。

这可行,但删除了 WebSecurity 方法的所有功能,以及特定授权,例如[Authorize(Roles = "...")],没有按预期工作,它没有授权任何角色。 Visual Studio 中的 MVC 示例项目使用 SimpleMembershipProvider 进行用户身份验证,但我还没有找到任何项目或教程来说明如何以与扩展 MembershipProvider 类并覆盖其方法相同的方式实现自定义身份验证。

问题是已经有一个有很多用户的 T-SQL 数据库,这些用户链接到其他服务,所以显然我不能以任何方式改变它,也不能创建新的数据库/表。我看过的项目是从头开始创建数据库的,我还没有找到任何使用WebSecurity 和现有数据库的自定义身份验证/授权的项目。

我想向您询问任何建议、示例或项目或教程的链接,我可以在其中了解如何实现 WebSecurity 而不是 FormsAuthentication。正如我所提到的,我已经有一个功能齐全的MembershipProviderRoleProvider,我相信SimpleMembershipProviderSimpleRoleProvider 有类似的方法,所以这部分应该不会那么难。另外,我不想混合 Webforms 和 MVC,我想要纯 MVC 应用程序。

我正在使用带有 C# 和 Razor 引擎、T-SQL 和 LINQ to SQL 的 ASP.NET MVC 4 进行数据库访问。

【问题讨论】:

    标签: asp.net-mvc-4 webforms migration forms-authentication webmatrix


    【解决方案1】:

    根据我的经验,在将旧页面从 webforms 迁移到 mvc 时,您必须“忘记”它曾经是一个 webform 页面。

    为了更直接地回答您对帮助资源的请求,也许这会很有用:http://kylehodgson.com/2013/01/08/asp-netmvc-web-security-basics-csrf/

    【讨论】:

    • 是的,我注意到如果我想这样做,我必须采取一种全新的方法。感谢您的链接,这是一篇好文章!关于角色授权,我已经实现了自定义 IPrincipal 并重写了 IsInRole 以从我的 RoleProvider 调用 IsUserInRole,现在它可以正常工作了。
    • 谢谢!我喜欢写它。