ASP.NET Core MVC專案基礎構建

wubing7755發表於2024-12-05

ASP.NET Core MVC專案基礎

概述

本文主要說明專案結構簡述、控制器配置、資料庫連線、簡單頁面搭建。

專案結構

新建ASP.NET Core Web App(MVC)專案後,其目錄及檔案結構如下:

Project
    |-- Dependencies 組織專案的外部依賴項
            |-- Analyzers   存放用於程式碼分析和診斷的工具
            |-- Frameworks  存放專案依賴的外部框架和庫
    |-- Properties   組織與專案屬性相關的配置檔案
            |-- launchSettings.json     專案啟動配置
    |-- wwwroot      組織靜態檔案
            |-- css         存放CSS樣式檔案,用於定義網頁的樣式和佈局
                    |-- site.css
            |-- js          存放JavaScript檔案,用於實現網頁的客戶端邏輯
                    |-- site.js
            |-- lib         存放第三方JavaScript庫或其他資原始檔
            |-- favicon.io  網站的圖示檔案,顯示在瀏覽器標籤頁上
    |-- 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();
    }
}

圖-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>
    }
}

參考文章

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/

相關文章