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 网站的图标文件,显示在浏览器标签页上
  • 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服务器的配置

图-1

appsettings.json

作用: 在生成环境中使用,存储应用程序的全局配置。

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

Program.cs文件说明

Program.cs 文件作为应用程序的入口点,负责配置和启动Web应用程序。

在Program.cs文件获取appsettings.json文件配置项

  1. 在appsettings.json中添加一个名为TempStr的键值对
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "TempStr": "Hello TempStr"
}
  1. 在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();
    }
}
  1. 启动项目,在浏览器中输入https://localhost:端口号

图-2

配置SQLite数据库

定义数据模型

Model文件夹下,新建Player.cs文件

public class Player
{
    [Key]
    public int Id { get; set; }

    [NotNull]
    public string Name { get; set; }

    public string? Description { get; set; }
}

创建数据库上下文

  1. 在Visual Studio中,打开NuGet包管理器,安装Microsoft.EntityFramework.Core

图-3

  1. 在项目中新建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连接

  1. 在Visual Studio中,打开NuGet包管理器,安装Microsoft.EntityFramework.Sqlite

图-4

  1. 在项目中新建Database文件夹,用来存放Sqlite数据库文件

  2. 在appsettings.json文件中配置数据库连接路径

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "DefaultConnection": "Data Source=./Database/project_db.db"
  }
}
  1. 在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();
    }
}

配置控制器

  1. 在Program.cs文件中注册控制器服务,以下只列出与控制器配置有关的代码:
var builder = WebApplication.CreateBuilder(args);

// 添加控制器和视图服务
builder.Services.AddControllersWithViews();

var app = builder.Build();

// 配置HTTP请求管道,映射属性路由的控制器
app.MapControllers();

app.Run();
  1. 在项目的Controllers文件夹下,添加PlayerPageController.cs文件
public class PlayerPageController : Controller
{
    // 配置属性路由
    [Route("PlayerPage")]
    public IActionResult Index()
    {
        return View();
    }
}
  1. 在项目的Views文件夹下,新建PlayerPage文件夹,在\Views\PlayerPage目录下,新建Index.cshtml文件
<h2>Player</h2>

<p>This is the player page.</p>
  1. 启动项目,在浏览器中输入https://localhost:端口号/PlayerPage

图-5

实例

说明: 获取数据库中所有的Player信息,并显示在页面上。

  1. 整合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();
    }
}
  1. 修改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);
    }
}
  1. 修改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>
    }
}
  1. 启动项目,在浏览器中输入https://localhost:端口号/PlayerPage

图-5

参考文章

  1. launchsettings.json与appsettings.json的区别:
    https://stackoverflow.com/questions/46955538/launchsettings-json-appsettings-json-web-config

  2. ASP.NET Core中的launchSettings.json:
    https://www.cnblogs.com/lzjsky/p/15783134.html

  3. ASP.NET Core中使用appsettings.json:
    https://www.cnblogs.com/lzjsky/p/15783142.html

  4. 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编辑  收藏  举报