下面是一个使用ASP.NET Core MVC连接到现有SQL Server数据库的解决方案,包含了身份验证和一些代码示例。
首先,确保你已经安装了ASP.NET Core和相关的包。然后,按照以下步骤操作:
创建一个新的ASP.NET Core MVC项目。你可以使用Visual Studio或者命令行工具来创建项目。
在项目中安装以下NuGet包:
在appsettings.json
文件中配置数据库连接字符串。例如:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=YourDatabaseName;Trusted_Connection=True;MultipleActiveResultSets=true"
},
// ...
}
创建一个名为ApplicationDbContext.cs
的文件,用于定义数据库上下文。在这个文件中,你需要继承自DbContext
类,并添加一个包含数据库表的DbSet
属性。以下是一个示例:
using Microsoft.EntityFrameworkCore;
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions options)
: base(options)
{
}
public DbSet Users { get; set; }
}
创建一个名为User.cs
的文件,用于定义用户实体类。以下是一个示例:
public class User
{
public int Id { get; set; }
public string Username { get; set; }
public string Password { get; set; }
}
在Startup.cs
文件中配置身份验证和数据库上下文。以下是一个示例:
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.EntityFrameworkCore;
public class Startup
{
// ...
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddDbContext(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/Account/Login";
});
// ...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseAuthentication();
app.UseAuthorization();
// ...
}
}
创建一个名为AccountController.cs
的文件,用于处理用户身份验证。以下是一个示例:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using System.Security.Claims;
using System.Threading.Tasks;
using YourNamespace.Models;
public class AccountController : Controller
{
private readonly ApplicationDbContext _dbContext;
public AccountController(ApplicationDbContext dbContext)
{
_dbContext = dbContext;
}
[HttpGet]
public IActionResult Login()
{
return View();
}
[HttpPost]
public async Task Login(LoginViewModel model)
{
var user = _dbContext.Users.FirstOrDefault(u => u.Username == model.Username && u.Password == model.Password);
if (user != null)
{
var claims = new[]
{
new Claim(ClaimTypes.Name, user.Username)
};
var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity));
return RedirectToAction("Index", "Home");
}
ModelState.AddModelError("", "Invalid login attempt");
return View(model);
}
[HttpGet]
public async Task Logout()
{
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
return RedirectToAction("Index", "Home");
}
}
创建一个名为LoginViewModel.cs
的文件,用于定义登录页面的视图模型。以下是一个示例:
public class LoginViewModel
{
public string Username { get; set; }
public string Password { get; set; }
}
创建一个名为Login.cshtml
的视图文件,用于显示登录表单。以下是一个示例:
@model LoginViewModel