ASP.NET Core MVC项目基础
ASP.NET Core MVC项目基础
概述
本文主要简述项目结构、控制器配置、SQLite数据库连接、简单页面搭建。
项目结构
在Visual Studio开发环境中,新建ASP.NET Core Web App(MVC)
项目后,其目录及文件结构如下:
Project Structure
-
Dependencies 组织项目的外部依赖项
- Analyzers 存放用于代码分析和诊断的工具
- Frameworks 存放项目依赖的外部框架和库
-
Properties 组织与项目属性相关的配置文件
launchSettings.json
项目启动配置
-
wwwroot 组织静态文件
- css 存放CSS样式文件,用于定义网页的样式和布局
site.css
- js 存放JavaScript文件,用于实现网页的客户端逻辑
site.js
- lib 存放第三方JavaScript库或其他资源文件
favicon.ico
网站的图标文件,显示在浏览器标签页上
- css 存放CSS样式文件,用于定义网页的样式和布局
-
Controllers 组织控制器类,它们负责处理用户的请求,并返回响应
-
Models 组织表示应用程序数据和业务逻辑的类
-
Views 组织视图文件
- Home 存放与首页相关的视图文件
- Shared 存放可以被多个视图共享的布局和部分视图文件
_Layout.cshtml
布局文件,定义了网页的通用结构和外观_ValidationScriptsPartial.cshtml
包含验证脚本的局部视图Error.cshtml
用于显示错误信息的视图
_ViewImports.cshtml
用于导入视图中的共享指令和命名空间_ViewStart.cshtml
在每个视图被渲染之前执行的代码,通常用于设置视图的通用属性
-
appsettings.json
应用程序的配置设置 -
Program.cs
应用程序的入口点,负责配置和启动Web应用程序
配置文件说明
launchSettings.json
作用: 仅在本地电脑上使用,用于启动和调试应用程序,当项目发布部署时,该文件无用。
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:25000",
"sslPort": 0
}
},
"profiles": {
"ProjectName": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:7145",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
配置文件结构如下:
|--
|-- iisSettings
|-- profiles
|-- ProjectName
|-- IIS Express
- iisSettings:表示与IIS(Internet Information Services)相关的配置设置。这些设置仅适用于当应用程序在IIS或IIS Express服务器上运行。
- profiles:表示Visual Studio开发环境下两种不同的启动配置:
ProjectName
:直接运行.NET Core CLI(命令行界面)的配置,通常用于启动和控制台应用程序或使用Kestrel作为Web服务器的ASP.NET Core应用程序。IIS Express
:使用IIS Express作为Web服务器的配置
appsettings.json
作用: 在生成环境中使用,存储应用程序的全局配置。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
Program.cs文件说明
Program.cs 文件作为应用程序的入口点,负责配置和启动Web应用程序。
在Program.cs文件获取appsettings.json文件配置项
- 在appsettings.json中添加一个名为
TempStr
的键值对
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"TempStr": "Hello TempStr"
}
- 在Program.cs中获取
TempStr
的值
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// 添加控制器和视图服务
builder.Services.AddControllersWithViews();
var app = builder.Build();
// 获取 TempStr值
string temp = app.Configuration["TempStr"];
// 配置HTTP请求管道
app.MapGet("/", async context =>
{
await context.Response.WriteAsync(temp);
});
app.Run();
}
}
- 启动项目,在浏览器中输入
https://localhost:端口号
配置SQLite数据库
定义数据模型
在Model文件夹
下,新建Player.cs文件
public class Player
{
[Key]
public int Id { get; set; }
[NotNull]
public string Name { get; set; }
public string? Description { get; set; }
}
创建数据库上下文
- 在Visual Studio中,打开NuGet包管理器,安装
Microsoft.EntityFramework.Core
包
- 在项目中新建
Data文件夹
,在Data文件夹
下新建DbContext.cs文件
public class DatabaseContext:DbContext
{
public DatabaseContext(DbContextOptions<DatabaseContext> options) : base(options) { }
// 数据库中存储玩家信息的表,表名:Players
public DbSet<Player> Players { get; set; }
}
创建数据库种子
在Data文件夹
下新建SeedData.cs文件
public class SeedData
{
// 注入数据库上下文实例,以便操作数据库
private readonly DatabaseContext _dbContext;
public SeedData(DatabaseContext dbContext)
{
_dbContext = dbContext;
}
public void InitialData()
{
// 检查是否已有数据,如果有,则不添加种子数据
if (!_dbContext.Players.Any())
{
// 添加种子数据
_dbContext.Players.AddRange(
new Player { Id = 1, Name = "John Doe" },
new Player { Id = 2, Name = "Jane Smith" },
new Player { Id = 3, Name = "Alice Johnson" }
);
// 保存更改到数据库
_dbContext.SaveChanges();
}
}
}
配置SQLite连接
- 在Visual Studio中,打开NuGet包管理器,安装
Microsoft.EntityFramework.Sqlite
包
-
在项目中新建
Database文件夹
,用来存放Sqlite数据库文件 -
在appsettings.json文件中配置数据库连接路径
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "Data Source=./Database/project_db.db"
}
}
- 在Program.cs文件中配置SQLite连接,并且初始化数据库,以下只列出与配置数据库有关的代码:
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// 添加数据库上下文服务到依赖注入容器
builder.Services.AddDbContext<DatabaseContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("DefaultConnection")));
// 注册数据库种子服务
builder.Services.AddTransient<SeedData>();
var app = builder.Build();
// 初始化数据库
using (var scope = app.Services.CreateScope())
{
var dbContext = scope.ServiceProvider.GetRequiredService<DatabaseContext>();
var seedata = scope.ServiceProvider.GetService<SeedData>();
dbContext.Database.EnsureCreated();
seedata.InitialData();
}
app.Run();
}
}
配置控制器
- 在Program.cs文件中注册控制器服务,以下只列出与控制器配置有关的代码:
var builder = WebApplication.CreateBuilder(args);
// 添加控制器和视图服务
builder.Services.AddControllersWithViews();
var app = builder.Build();
// 配置HTTP请求管道,映射属性路由的控制器
app.MapControllers();
app.Run();
- 在项目的
Controllers文件夹
下,添加PlayerPageController.cs文件
public class PlayerPageController : Controller
{
// 配置属性路由
[Route("PlayerPage")]
public IActionResult Index()
{
return View();
}
}
- 在项目的
Views文件夹
下,新建PlayerPage文件夹
,在\Views\PlayerPage目录下,新建Index.cshtml文件
<h2>Player</h2>
<p>This is the player page.</p>
- 启动项目,在浏览器中输入
https://localhost:端口号/PlayerPage
实例
说明: 获取数据库中所有的Player信息,并显示在页面上。
- 整合Program.cs文件
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// 添加控制器和视图服务
builder.Services.AddControllersWithViews();
// 添加数据库上下文服务到依赖注入容器
builder.Services.AddDbContext<DatabaseContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("DefaultConnection")));
// 注册数据库种子服务
builder.Services.AddTransient<SeedData>();
// 注册PlayerPageController到依赖注入容器
builder.Services.AddScoped<PlayerPageController>();
var app = builder.Build();
// 配置HTTP请求管道,映射属性路由的控制器
app.MapControllers();
// 初始化数据库
using (var scope = app.Services.CreateScope())
{
var dbContext = scope.ServiceProvider.GetRequiredService<DatabaseContext>();
var seedata = scope.ServiceProvider.GetService<SeedData>();
dbContext.Database.EnsureCreated();
seedata.InitialData();
}
app.Run();
}
}
- 修改PlayerPageController.cs文件
public class PlayerPageController : Controller
{
private readonly DatabaseContext _dbContext;
public PlayerPageController(DatabaseContext dbContext)
{
_dbContext = dbContext;
}
[Route("PlayerPage")]
public IActionResult Index()
{
var players = _dbContext.Players;
return View(players);
}
}
- 修改Views/PlayerPage/Index.cshtml文件
@model IEnumerable<ProjectName.Models.Player>
<h2>Player</h2>
<p>This is the player page.</p>
@{
foreach(var play in Model)
{
<p>@play.Name</p>
}
}
- 启动项目,在浏览器中输入
https://localhost:端口号/PlayerPage
参考文章
-
launchsettings.json与appsettings.json的区别:
https://stackoverflow.com/questions/46955538/launchsettings-json-appsettings-json-web-config -
ASP.NET Core中的launchSettings.json:
https://www.cnblogs.com/lzjsky/p/15783134.html -
ASP.NET Core中使用appsettings.json:
https://www.cnblogs.com/lzjsky/p/15783142.html -
ASP.NET Core 中的 Startup 类和 Program.cs 是什么:
https://www.c-sharpcorner.com/article/what-is-startup-class-and-program-cs-in-asp-net-core/
文章声明
- 内容准确性:我会尽力确保所分享信息的准确性和可靠性,但由于个人知识有限,难免会有疏漏或错误。如果您在阅读过程中发现任何问题,请不吝赐教,我将及时更正。
posted on 2024-12-05 13:16 wubing7755 阅读(52) 评论(0) 编辑 收藏 举报