杰瑞科技汇

asp.net程序设计教程

ASP.NET 程序设计教程:从入门到实战

ASP.NET 是由微软开发的一个用于构建 Web 应用程序的强大框架,它已经历了多个重大版本,目前的主流是 ASP.NET Core,本教程将主要围绕 ASP.NET Core 展开,因为它是现代、跨平台、高性能的未来方向。

asp.net程序设计教程-图1
(图片来源网络,侵删)

目录

  1. 第一部分:基础入门

    • 什么是 ASP.NET?
    • 为什么选择 ASP.NET Core?
    • 开发环境搭建
    • 创建你的第一个 ASP.NET Core 应用
    • 理解项目结构
  2. 第二部分:核心概念

    • MVC 架构模式
    • 路由
    • 控制器
    • 视图
    • 模型
  3. 第三部分:数据交互

    • Entity Framework Core 介绍
    • 数据库迁移
    • CRUD 操作(增删改查)
    • 数据验证
  4. 第四部分:进阶与实战

    asp.net程序设计教程-图2
    (图片来源网络,侵删)
    • 身份验证与授权
    • API 开发
    • 依赖注入
    • 使用前端框架(如 Blazor, Vue, React)
    • 部署应用

第一部分:基础入门

什么是 ASP.NET?

ASP.NET 是一个用于在服务器上构建动态 Web 站点和 Web 应用程序的框架,它允许开发者使用 C#(或 VB.NET)等 .NET 语言来编写服务器端逻辑,生成 HTML、CSS 和 JavaScript 响应给客户端浏览器。

为什么选择 ASP.NET Core?

  • 跨平台:可以在 Windows、Linux 和 macOS 上运行。
  • 开源:完全开源,拥有活跃的社区。
  • 高性能:经过高度优化,性能卓越。
  • 云原生:为云部署而设计,支持容器化(Docker)。
  • 模块化:采用 NuGet 包的形式,你可以按需引入功能,使应用更轻量。
  • 统一框架:使用同一套框架构建 Web UI (MVC/Razor Pages) 和 Web API。

开发环境搭建

你需要安装以下工具:

  1. .NET SDK (Software Development Kit)

  2. 代码编辑器

    asp.net程序设计教程-图3
    (图片来源网络,侵删)
    • Visual Studio Code (VS Code):免费、轻量级、跨平台,强烈推荐。
    • Visual Studio (Community Edition):功能最强大的 IDE,提供丰富的调试和设计工具,Windows 平台首选。
  3. (可选) 数据库

    • SQL Server Express LocalDB:Visual Studio 安装时会附带一个轻量版的 SQL Server,非常适合本地开发。
    • SQLite:一个轻量级的文件数据库,无需安装服务器,非常适合初学者。

创建你的第一个 ASP.NET Core 应用

打开终端或命令提示符,运行以下命令:

# 创建一个新的 Web 应用项目
dotnet new mvc -o MyFirstWebApp
# 进入项目目录
cd MyFirstWebApp
# 运行项目
dotnet run

执行 dotnet run 后,终端会显示类似下面的信息:

info: Microsoft.Hosting.Lifetime[14]
      Now listening on: https://localhost:7123
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5123
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.

打开你的浏览器,访问 https://localhost:7123(端口号可能不同),你将看到 ASP.NET Core 的默认欢迎页面。

理解项目结构

使用 VS Code 或 Visual Studio 打开 MyFirstWebApp 项目,你会看到以下关键文件夹:

  • Controllers/:存放控制器类,控制器负责接收 HTTP 请求,处理业务逻辑,并返回响应。
  • Models/:存放数据模型类,模型定义了你的应用数据结构,并包含业务验证逻辑。
  • Views/:存放 Razor 视图文件(.cshtml),视图负责生成 HTML 页面展示给用户。
  • wwwroot/:存放静态文件,如 CSS、JavaScript、图片等。
  • Program.cs:应用的入口点,在这里配置服务(如数据库、中间件)和请求处理管道。
  • appsettings.json:存放应用的配置信息,如数据库连接字符串、日志级别等。

第二部分:核心概念

MVC 架构模式

ASP.NET Core MVC 是一种实现“模型-视图-控制器”设计模式的框架。

  • 模型:应用程序的数据和业务逻辑,它独立于用户界面。
  • 视图:用户界面,它从模型获取数据并展示给用户。
  • 控制器:接收用户输入(通过浏览器请求),调用模型处理数据,然后选择一个视图来展示结果,它是模型和视图之间的协调者。

工作流程

  1. 用户在浏览器中输入 URL 并发送请求。
  2. 路由系统将请求映射到对应的控制器和动作方法。
  3. 控制器执行动作方法,可能调用模型进行数据处理。
  4. 控制器选择一个视图,并将模型数据传递给该视图。
  5. 视图使用模型数据渲染成 HTML。
  6. 服务器将 HTML 响应返回给用户的浏览器。

路由

路由是连接 URL 和控制器动作的机制,在 Program.cs 中,你可以看到默认的路由配置:

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
  • {controller=Home}:默认控制器是 Home
  • {action=Index}:默认动作方法是 Index
  • {id?}:可选的 id 参数。

访问 /Home/Details/5,会被解析为:调用 HomeController 控制器的 Details 动作方法,并传入 id = 5

控制器

控制器是一个类,继承自 Controller 基类,它包含多个公共方法,称为“动作方法”。

示例:Controllers/HomeController.cs

using Microsoft.AspNetCore.Mvc;
namespace MyFirstWebApp.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View(); // 返回一个与动作方法同名的视图
        }
        public IActionResult Welcome(string name, int numTimes = 1)
        {
            ViewData["Message"] = "Hello " + name;
            ViewData["NumTimes"] = numTimes;
            return View();
        }
    }
}

视图

视图使用 Razor 语法,这是一种在 HTML 中嵌入 C# 代码的标记语言。

示例:Views/Home/Welcome.cshtml

@{
    ViewData["Title"] = "Welcome";
}
<h2>Welcome</h2>
<ul>
    @for (int i = 0; i < (int)ViewData["NumTimes"]; i++)
    {
        <li>@ViewData["Message"]</li>
    }
</ul>
  • 符号用于切换到 C# 模式。
  • ViewData 是一个字典对象,用于从控制器向视图传递数据。

模型

模型是简单的 C# 类(POCO - Plain Old CLR Object),用于表示数据。

示例:在 Models/ 文件夹下创建 Movie.cs

namespace MyFirstWebApp.Models
{
    public class Movie
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }
        public decimal Price { get; set; }
    }
}

第三部分:数据交互

Entity Framework Core (EF Core) 介绍

EF Core 是微软官方的对象关系映射器,它让你可以用 C# 对象(模型)来操作数据库,而无需编写 SQL 语句。

  • Code-First:你先定义 C# 模型类,EF Core 根据这些类生成数据库结构,这是最常用的方式。

数据库迁移

迁移是 EF Core 管理数据库架构变化的机制。

步骤:

  1. 安装 EF Core 包: 在终端中运行:

    dotnet add package Microsoft.EntityFrameworkCore.SqlServer
    dotnet add package Microsoft.EntityFrameworkCore.Design
  2. 创建 DbContextDbContext 是 EF Core 与数据库交互的主要类。

    // Models/MovieDbContext.cs
    using Microsoft.EntityFrameworkCore;
    namespace MyFirstWebApp.Models
    {
        public class MovieDbContext : DbContext
        {
            public MovieDbContext(DbContextOptions<MovieDbContext> options) : base(options)
            {
            }
            public DbSet<Movie> Movies { get; set; }
        }
    }
  3. 注册 DbContext: 在 Program.cs 中注册服务。

    // Program.cs
    using MyFirstWebApp.Models;
    var builder = WebApplication.CreateBuilder(args);
    // Add services to the container.
    builder.Services.AddControllersWithViews();
    // 注册 DbContext
    builder.Services.AddDbContext<MovieDbContext>(options =>
        options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
    var app = builder.Build();
    // ... 其余代码

    并在 appsettings.json 中添加连接字符串:

    {
      "ConnectionStrings": {
        "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MovieDb;Trusted_Connection=True;MultipleActiveResultSets=true"
      },
      // ...
    }
  4. 创建和应用迁移

    # 创建初始迁移
    dotnet ef migrations add InitialCreate
    # 将迁移应用到数据库
    dotnet ef database update

    执行后,LocalDB 中会创建一个名为 MovieDb 的数据库,并包含一个 Movies 表。

CRUD 操作

控制器中实现 CRUD

// Controllers/MoviesController.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using MyFirstWebApp.Models;
public class MoviesController : Controller
{
    private readonly MovieDbContext _context;
    public MoviesController(MovieDbContext context)
    {
        _context = context;
    }
    // GET: Movies
    public async Task<IActionResult> Index()
    {
        return View(await _context.Movies.ToListAsync());
    }
    // GET: Movies/Details/5
    public async Task<IActionResult> Details(int? id)
    {
        if (id == null) return NotFound();
        var movie = await _context.Movies.FirstOrDefaultAsync(m => m.Id == id);
        if (movie == null) return NotFound();
        return View(movie);
    }
    // GET: Movies/Create
    public IActionResult Create()
    {
        return View();
    }
    // POST: Movies/Create
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create([Bind("Title,ReleaseDate,Genre,Price")] Movie movie)
    {
        if (ModelState.IsValid)
        {
            _context.Add(movie);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
        return View(movie);
    }
    // ... (Update 和 Delete 方法类似)
}

数据验证

在模型类中使用数据注解来定义验证规则。

// Models/Movie.cs
using System.ComponentModel.DataAnnotations;
public class Movie
{
    public int Id { get; set; }
    [Required]
    [StringLength(100)]
    public string Title { get; set; }
    [DataType(DataType.Date)]
    [Display(Name = "Release Date")]
    public DateTime ReleaseDate { get; set; }
    [StringLength(30)]
    public string Genre { get; set; }
    [Range(0, 100)]
    [DataType(DataType.Currency)]
    public decimal Price { get; set; }
}

在视图中,<input asp-for="Title"> 会自动应用这些验证规则,并在提交时进行客户端和服务器端验证。


第四部分:进阶与实战

身份验证与授权

ASP.NET Core 内置了强大的身份验证系统,支持多种登录方式(如 Cookie、JWT、OAuth)。

  • 身份验证:确定“你是谁?”(登录)。
  • 授权:确定“你能做什么?”(只有管理员才能删除电影)。

Program.cs 中添加身份验证服务:

builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.LoginPath = "/Account/Login";
    });
app.UseAuthentication(); // 必须在 UseRouting 之后,UseAuthorization 之前
app.UseAuthorization();

API 开发

ASP.NET Core MVC 也可以轻松构建 RESTful API,API 控制器通常返回 JSON 数据。

// Controllers/MoviesApiController.cs
[ApiController]
[Route("api/[controller]")]
public class MoviesApiController : ControllerBase
{
    private readonly MovieDbContext _context;
    public MoviesApiController(MovieDbContext context)
    {
        _context = context;
    }
    [HttpGet]
    public async Task<ActionResult<IEnumerable<Movie>>> GetMovies()
    {
        return await _context.Movies.ToListAsync();
    }
    [HttpGet("{id}")]
    public async Task<ActionResult<Movie>> GetMovie(int id)
    {
        var movie = await _context.Movies.FindAsync(id);
        if (movie == null) return NotFound();
        return movie;
    }
    // ...
}

依赖注入

依赖注入是 ASP.NET Core 的核心设计模式,它使得组件之间的耦合度降低,代码更易于测试和维护,我们在 MoviesController 中通过构造函数注入 MovieDbContext 就是典型的 DI 应用。

使用前端框架

你可以将 ASP.NET Core 作为后端 API,使用现代前端框架(如 Vue.js, React, Angular)来构建用户界面,ASP.NET Core 提供了 Blazor 框架,允许你使用 C# 和 Razor 语法在浏览器中构建交互式 UI,实现前后端统一。

部署应用

开发完成后,你需要将应用部署到服务器上。

  • 发布应用

    dotnet publish -c Release -o ./publish

    这会生成一个包含所有依赖项的文件夹,可以将其复制到服务器上运行。

  • 部署选项

    • IIS (Windows Server):传统部署方式。
    • Azure App Service:微软云平台,一键部署,非常方便。
    • Docker 容器:将应用打包成 Docker 镜像,在任何支持 Docker 的环境中运行,实现一致性。

学习资源推荐

这份教程为你勾勒出了 ASP.NET Core 开发的完整路径,最好的学习方式是动手实践,从一个简单的项目开始,逐步添加功能,不断探索和解决遇到的问题,祝你学习愉快!

分享:
扫描分享到社交APP
上一篇
下一篇