使用ASP.NET连接SQL数据库实现登录页面的方案

简介

在开发Web应用程序时,登录页面是一个基本的功能模块。本文将介绍如何使用ASP.NET连接SQL数据库来实现一个简单的登录页面。

准备工作

在开始之前,我们需要确保已经安装好了以下工具和环境:

  • Visual Studio(本文使用Visual Studio 2019)
  • SQL Server(本文使用SQL Server 2019)
  • ASP.NET框架(本文使用ASP.NET Core 3.1)

创建登录页面

首先,我们需要创建一个ASP.NET Core Web应用程序,并添加一个登录页面。可以通过以下步骤来完成:

  1. 打开Visual Studio,并选择“创建新项目”。
  2. 选择“ASP.NET Core Web应用程序”模板,并点击“下一步”。
  3. 输入项目名称,并点击“下一步”。
  4. 选择“Web应用程序(.NET Core)”模板,并点击“下一步”。
  5. 选择“身份验证”为“没有验证”,并点击“创建”。

在完成上述步骤后,将会创建一个空的ASP.NET Core Web应用程序,并且已经包含了一个默认的登录页面。

连接SQL数据库

接下来,我们需要连接SQL数据库,以便在登录页面中验证用户的凭据。可以按照以下步骤来完成:

  1. 在Visual Studio中,打开appsettings.json文件,并添加以下配置:
"ConnectionStrings": {
  "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=YourDatabase;Trusted_Connection=True;MultipleActiveResultSets=true"
}

请确保将YourDatabase替换为实际的数据库名称。

  1. 打开Startup.cs文件,并在ConfigureServices方法中添加以下代码:
services.AddDbContext<ApplicationDbContext>(options =>
  options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
  1. Services文件夹中创建一个名为ApplicationDbContext.cs的新类,并将以下代码添加到该类中:
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;

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

现在,我们已经成功连接了SQL数据库。

创建用户模型和数据库表

为了存储和验证用户的凭据,我们需要创建一个用户模型,并将其映射到数据库表。按照以下步骤来完成:

  1. Models文件夹中创建一个名为User.cs的新类,并添加以下代码:
using Microsoft.AspNetCore.Identity;

public class User : IdentityUser
{
}
  1. 打开ApplicationDbContext.cs文件,并在类中添加以下代码:
public DbSet<User> Users { get; set; }
  1. 在Visual Studio的“包管理器控制台”中,运行以下命令以创建数据库迁移:
Add-Migration InitialCreate
  1. 运行以下命令以将迁移应用到数据库:
Update-Database

现在,我们已经成功创建了用户模型和数据库表。

实现登录逻辑

接下来,我们需要在登录页面中实现用户验证逻辑。按照以下步骤来完成:

  1. 打开Controllers文件夹中的AccountController.cs文件,并将以下代码添加到Login方法中:
using Microsoft.AspNetCore.Identity;

private readonly SignInManager<User> _signInManager;

public AccountController(SignInManager<User> signInManager)
{
    _signInManager = signInManager;
}

[HttpPost]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
    ViewData["ReturnUrl"] = returnUrl;
    if (ModelState.IsValid)
    {
        var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
        if (result.Succeeded)
        {
            return RedirectToLocal(returnUrl);
        }
        else
        {
            ModelState.AddModelError(string.Empty, "Invalid login attempt.");
            return View(model);
        }
    }
    return View(model);
}
  1. 打开Views文件夹中的Account文件夹,并编辑Login.cshtml文件,添加以下代码:
@model LoginViewModel

<form asp-action="Login" asp-controller="Account" method="post">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <div class="form-group">
        <label asp