我需要启动一个新的 mvc 项目,并且一如既往地遇到有关 asp 标识的问题,永远不知道把它放在哪里!
我计划像这样组织解决方案:
- ProjectWebUI - 带有asp身份框架的mvc应用程序(由具有身份验证的Internet模板制成(
- ProjectDataAccessLayer - 使用
dapper
作为数据库访问技术的存储库类 - ProjectWebAPI - Web 服务
但是我有点困惑,在开始编码之前,我需要更有经验的人的建议(因为到目前为止,我的所有项目都只是一个具有数据访问权限的项目(:
- 在
- WebUI 项目中使用 asp 标识,使用标准实体框架进行数据访问,并在单独的程序集中使用 dapper 进行其他数据访问,这是否是个好主意?
- 如果 asp 身份位于 WebUI 项目中,我是否会遇到一些问题来接收对 WebAPI 项目的身份验证访问权限?
这就是我最近组织一个项目的方式:
-
Common
— 这是解决方案中的核心项目。它包含所有域实体以及从标识框架继承IdentityUser
类 ASP.NETApplicationUser
类。通常,此类位于新的 ASP.NET MVC 项目模板中;我决定把它放到核心库中,因为它代表了一个公共实体,可能需要更高的层和抽象级别。因此,Common
引用Microsoft.AspNet.Identity.Core
和Microsoft.AspNet.Identity.EntityFramework
程序集。 -
DataAccess
— 此项目引用Common
库,并包含实体 FraneworkDatabaseContext
以及一些存储库。我使用代码优先方法,我的DatabaseContext
继承自IdentityDbContext<ApplicationUser>
。因此,它为我提供了一个很好的数据库结构,其中包含用于Users
和Roles
的表以及其他 ASP.NET 标识内容,以及表示Common
项目中我的自定义业务实体的表,因此我可以轻松地将自定义实体与标识对象连接起来。 -
WebApi
— 这是一项使用DataAccess
和Common
库的REST
服务。此处的所有授权和身份验证作业都使用令牌身份验证完成。 -
Web
— 这只是我的REST
服务的 Web 客户端。
因此,为了回答您的问题:如果 ASP.NET Identity 类和实体框架数据库上下文非常小且易于管理,则可以将其保留在单个项目中;否则,最好远离默认项目模板并为每个主要应用程序模块引入层。