65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET Core Identity:设置 Web 项目和 Identity 数据库

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.26/5 (9投票s)

2017年11月25日

CPOL

4分钟阅读

viewsIcon

32774

设置项目和数据库

引言

在之前的文章中,我尝试解释了 ASP.NET Core Identity 的工作原理。在这一步,我们将创建项目和数据库来使用 ASP.NET Core Identity。我们将从一个空项目开始,并逐步在该项目上构建功能。

设置 Web 项目和 Identity 数据库

本文的代码可在本仓库的 Demo 1 文件夹中找到 - https://github.com/ra1han/aspnet-core-identity

创建项目

本文基于 ASP.NET Core 2.0Visual Studio 15.4.3。较低版本的 Visual Studio 可能没有正确的项目模板,因此请确保您拥有正确版本的 Visual Studio。

在 Visual Studio 中,让我们使用 Empty 项目模板创建一个 ASP.NET Core 2.0 Web 项目。我们希望从头开始,以便完全理解 ASP.NET Core Identity 的工作原理。

空项目的内容不多。需要了解的关键是:

  • Program.cs - 此文件中的代码基本上定义了 Web 服务器和启动类。
  • Startup.cs - 我们在此类中定义请求处理管道并配置服务。

ConfigureServices 方法用于配置应用程序中使用的各种服务,如 Entity Framework、Identity 等。

public void ConfigureServices(IServiceCollection services)
{
}

Configure 方法用于使用中间件配置请求处理管道。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

随着文章的进展,我们将对这两个方法进行更改。

ASP.NET Core 2.0 的另一个有趣之处在于,它拥有 .csproj 文件而不是 project.json 文件。您可以通过右键单击“解决方案资源管理器”中的项目节点并选择 Edit (ProjectName).csproj 来打开 .csproj 文件。

如果我们打开 .csproj 文件,会发现它引用了 Microsoft.AspNetCore.All 元包。ASP.NET Core 2.x 和 Entity Framework Core 2.x 所需的所有 nuget 包都包含在 Microsoft.AspNetCore.All 包中。

准备模型

Microsoft.AspNetCore.Identity 命名空间 为用户管理定义了以下模型:

  • IdentityUser
  • IdentityRole
  • IdentityUserRole
  • IdentityUserClaim
  • IdentityUserLogin
  • IdentityUserToken
  • IdentityRoleClaim

我们可以在我们的应用程序中直接使用这些类(在大多数情况下都会这样做)。但我们也可以定义自己的类并继承它们。让我们扩展 IdentityUser 类,并在此模型中添加名字姓氏

为此,让我们在解决方案中添加一个 Models 文件夹。添加一个名为 ApplicationUser 的类,它继承自 IdentityUser

public class ApplicationUser : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

准备 Entity Framework

在开始下一步之前,我们将向解决方案添加一个 appsettings.json 文件。默认情况下,它会添加一个如下所示的连接字符串:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;
    Database=_CHANGE_ME;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}

让我们将数据库名称从 "_CHANGE_ME" 更改为 "IdentityDemo" 或其他更有意义的名称。

准备 Entity Framework

ASP.NET Core Identity 附带 Entity Framework Core Identity 包,该包有一个 EF Core 实现,用于将用户信息存储在 SQL Server 数据库中。

Microsoft.AspNetCore.Identity.EntityFrameworkCore 命名空间实现了 IdentityDbContext<TUser>,它继承自 DbContext。此类为所有 Identity 模型提供了现成的 DbSet

因此,我们可以创建继承自 IdentityDbContext<ApplicationUser>ApplicationDbContext

让我们向解决方案添加一个名为 Data 的文件夹,并将 ApplicationDbContext 类添加到该文件夹中。

public class ApplicationDbContext : IdentityDbContext<applicationuser>
{
	public ApplicationDbContext(DbContextOptions<applicationdbcontext> options)
	: base(options)
	{
	}

	protected override void OnModelCreating(ModelBuilder builder)
	{
		base.OnModelCreating(builder);
	}
}

准备服务和中间件

在上一步中,我们似乎没有在 ApplicationDbContext 类中使用任何连接字符串。相反,我们通过依赖注入注入了 DbContextOptions。请记住,我们必须在 Startup 类的 ConfigureServices 方法中配置此项。

我们必须做的另一件重要事情是配置与 ASP.NET Core Identity 相关的服务以进行依赖注入。最终的 ConfigureServices 方法将如下所示:

public void ConfigureServices(IServiceCollection services)
{
	services.AddDbContext<applicationdbcontext>(options =>
			 options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

	services.AddIdentity<applicationuser, identityrole="">()
										  .AddEntityFrameworkStores<applicationdbcontext>()
										  .AddDefaultTokenProviders();
}

最后,我们必须将 Identity 添加到请求管道。为此,我们在 Configure 方法的末尾添加以下行:

app.UseAuthentication();

此行将身份验证中间件添加到请求管道。

准备迁移和数据库

要使用 EF Core 创建数据库,我们需要迁移。为此,请安装以下包:

Install-package Microsoft.EntityFrameworkCore.Tools

确保 .csproj 文件如下所示:

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" />
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
  </ItemGroup>
  
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.1" />
  </ItemGroup>

现在,要创建一个名为 "initial" 的迁移,请在 .csproj 文件所在的文件夹中,在 cmd 中运行以下命令:

dotnet ef migrations add Initial

现在,运行以下命令创建数据库:

dotnet ef database update

现在,如果您打开数据库,您将看到数据库已根据连接字符串中提到的名称创建。数据库将如下所示:

因此,我们已经在空项目中从头开始配置了 Identity,并且还创建了数据库。在下一篇文章中,我们将看到如何在 MVC 项目中使用它。

© . All rights reserved.