使用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应用程序,并添加一个登录页面。可以通过以下步骤来完成:
- 打开Visual Studio,并选择“创建新项目”。
- 选择“ASP.NET Core Web应用程序”模板,并点击“下一步”。
- 输入项目名称,并点击“下一步”。
- 选择“Web应用程序(.NET Core)”模板,并点击“下一步”。
- 选择“身份验证”为“没有验证”,并点击“创建”。
在完成上述步骤后,将会创建一个空的ASP.NET Core Web应用程序,并且已经包含了一个默认的登录页面。
连接SQL数据库
接下来,我们需要连接SQL数据库,以便在登录页面中验证用户的凭据。可以按照以下步骤来完成:
- 在Visual Studio中,打开
appsettings.json
文件,并添加以下配置:
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=YourDatabase;Trusted_Connection=True;MultipleActiveResultSets=true"
}
请确保将YourDatabase
替换为实际的数据库名称。
- 打开
Startup.cs
文件,并在ConfigureServices
方法中添加以下代码:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
- 在
Services
文件夹中创建一个名为ApplicationDbContext.cs
的新类,并将以下代码添加到该类中:
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
现在,我们已经成功连接了SQL数据库。
创建用户模型和数据库表
为了存储和验证用户的凭据,我们需要创建一个用户模型,并将其映射到数据库表。按照以下步骤来完成:
- 在
Models
文件夹中创建一个名为User.cs
的新类,并添加以下代码:
using Microsoft.AspNetCore.Identity;
public class User : IdentityUser
{
}
- 打开
ApplicationDbContext.cs
文件,并在类中添加以下代码:
public DbSet<User> Users { get; set; }
- 在Visual Studio的“包管理器控制台”中,运行以下命令以创建数据库迁移:
Add-Migration InitialCreate
- 运行以下命令以将迁移应用到数据库:
Update-Database
现在,我们已经成功创建了用户模型和数据库表。
实现登录逻辑
接下来,我们需要在登录页面中实现用户验证逻辑。按照以下步骤来完成:
- 打开
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);
}
- 打开
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