C#教程:ASP.NETWeb开发入门(如果教程侧重于ASP.NET)

C# 教程:ASP.NET Web 开发入门

ASP.NET 是一个强大的 Web 应用程序框架,由微软开发,用于构建动态网站、Web 应用程序和 Web 服务。它基于 .NET 平台,可以使用 C# 等多种编程语言。本教程将引导您入门 ASP.NET Web 开发,重点介绍使用 C# 语言构建 Web 应用程序的基础知识。

一、ASP.NET 简介

ASP.NET 提供了多种开发模型,包括:

  • ASP.NET Web Forms: 一种基于事件驱动的编程模型,类似于 Windows Forms 开发。它使用服务器控件和视图状态来简化 Web 开发,但可能会导致页面臃肿和性能问题。 (本教程较少涉及,因为目前主流是 MVC 和 Web API)

  • ASP.NET MVC (Model-View-Controller): 一种流行的设计模式,将应用程序分为三个主要组件:

    • Model(模型): 表示应用程序的数据和业务逻辑。
    • View(视图): 负责显示数据并与用户交互(通常是 HTML、CSS 和 JavaScript)。
    • Controller(控制器): 处理用户请求,与模型交互,并选择要呈现的视图。
      MVC 模式使代码更易于组织、测试和维护。
  • ASP.NET Web API: 用于构建 HTTP 服务(RESTful API),这些服务可以被各种客户端(包括浏览器、移动应用程序等)使用。 Web API 通常用于构建单页应用程序 (SPA) 或为移动应用程序提供后端支持。

  • ASP.NET Core: 一个跨平台、高性能的开源框架,是 ASP.NET 的新一代版本。它结合了 MVC 和 Web API 的功能,并进行了许多改进和优化。 (如果教程侧重于 ASP.NET Core,则应明确指出,本文主要关注传统的 ASP.NET)

  • ASP.NET Razor Pages: 一种更轻量级的、基于页面的开发模型,简化了简单Web应用程序的开发. Razor Pages 将 UI 逻辑(使用 Razor 语法)直接嵌入到 HTML 页面中.

本教程主要关注 ASP.NET MVCASP.NET Web API,因为它们是目前构建 Web 应用程序最常用的两种方式。

二、开发环境设置

  1. Visual Studio: 微软提供的集成开发环境 (IDE),是开发 ASP.NET 应用程序的首选工具。 建议使用 Visual Studio 2019 或更高版本。 Visual Studio Community 版本是免费的,适用于个人开发者和小型团队。

  2. .NET Framework 或 .NET SDK: 根据您选择的 ASP.NET 版本,需要安装相应的 .NET Framework 或 .NET SDK。 Visual Studio 安装程序通常会提供安装这些组件的选项。

  3. IIS Express (可选): Visual Studio 自带的轻量级 Web 服务器,用于在开发过程中运行和调试 ASP.NET 应用程序。 如果您需要更全面的 Web 服务器功能,可以安装完整的 IIS (Internet Information Services)。

  4. SQL Server Express LocalDB (可选):Visual Studio 自带的轻量级数据库,便于开发.

三、创建第一个 ASP.NET MVC 应用程序

  1. 打开 Visual Studio,选择“创建新项目”。

  2. 在项目模板中,选择“ASP.NET Web 应用程序 (.NET Framework)”或“ASP.NET Core Web 应用程序” (如果使用 .net core)。 选择 C# 作为编程语言。

  3. 为项目命名,选择项目位置,然后单击“创建”。

  4. 在下一个对话框中,选择“MVC”模板。 确保选择了正确的 .NET Framework 或 .NET 版本。 您可以选择是否添加身份验证(例如,个人用户帐户)。

  5. 单击“创建”以创建项目。

Visual Studio 将创建一个包含基本 MVC 应用程序结构的项目。 您将看到以下文件夹:

  • Models: 用于存放数据模型类。
  • Views: 用于存放视图文件(.cshtml 文件,使用 Razor 语法)。
  • Controllers: 用于存放控制器类。
  • App_Start: 包含一些启动配置,例如RouteConfig.cs
  • Content: 用于存放静态资源(CSS、JavaScript、图像等)。
  • Scripts: 用于存放 JavaScript 文件。

四、MVC 应用程序的基本结构

  1. 控制器 (Controllers): 控制器是处理用户请求的中心。它们接收来自浏览器的请求,与模型交互以获取或更新数据,然后选择一个视图来呈现给用户。

    ```csharp
    // Controllers/HomeController.cs
    using System.Web.Mvc;

    namespace MyWebApp.Controllers
    {
    public class HomeController : Controller
    {
    public ActionResult Index()
    {
    ViewBag.Message = "Welcome to my ASP.NET MVC application!";
    return View();
    }

        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";
            return View();
        }
    
        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";
            return View();
        }
    }
    

    }
    ```

    • ActionResult 是控制器方法的返回类型,表示要执行的操作结果(例如,返回一个视图、重定向到另一个 URL、返回 JSON 数据等)。
    • View() 方法返回一个视图。 默认情况下,它会查找与控制器方法同名的视图文件(例如,Index() 方法会查找 Views/Home/Index.cshtml)。
    • ViewBag 是一个动态对象,用于将数据从控制器传递到视图。
  2. 视图 (Views): 视图负责呈现用户界面。 ASP.NET MVC 使用 Razor 语法,它允许您在 HTML 中嵌入 C# 代码。

    ```html

    @{
    ViewBag.Title = "Home Page";
    }

    @ViewBag.Message

    Learn about building Web apps with ASP.NET.

    ```

    • @ 符号表示 Razor 代码块的开始。
    • @ViewBag.Message 显示从控制器传递过来的消息。
  3. 模型 (Models): 模型表示应用程序的数据和业务逻辑。 它们通常是简单的 C# 类。

    csharp
    // Models/Product.cs
    namespace MyWebApp.Models
    {
    public class Product
    {
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    }
    }

  4. 路由 (Routing): 路由配置定义了 URL 如何映射到控制器和操作。默认路由配置通常位于 App_Start/RouteConfig.cs 文件中。
    ```csharp
    //App_Start/RouteConfig.cs
    public class RouteConfig
    {
    public static void RegisterRoutes(RouteCollection routes)
    {
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
    

    }

    ``
    这段代码定义了一个名为"Default"的路由规则。
    *
    {controller}/{action}/{id}: 这是 URL 模式。它表示 URL 的结构。
    *
    {controller}: URL 中的第一个部分,对应于控制器名称。
    *
    {action}: URL 中的第二个部分,对应于控制器中的操作(方法)名称。
    *
    {id}: URL 中的第三个部分,通常是可选的参数.
    *
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }: 这部分指定了默认值。
    *
    controller = "Home": 如果没有指定控制器,则默认使用名为 "Home" 的控制器。
    *
    action = "Index": 如果没有指定操作,则默认使用 "Home" 控制器中的 "Index" 操作。
    *
    id = UrlParameter.Optional:id` 参数是可选的。

五、创建第一个 ASP.NET Web API 应用程序

  1. 与创建 MVC 应用程序类似,选择“ASP.NET Web 应用程序 (.NET Framework)”或“ASP.NET Core Web 应用程序”。

  2. 选择“Web API”模板。

  3. Visual Studio 将创建一个包含基本 Web API 应用程序结构的项目。 您将看到与 MVC 应用程序类似的文件夹,但 Controllers 文件夹中的控制器类将继承自 ApiController(或 .NET Core 中的 ControllerBase)。

  4. Web API 控制器示例:

    ```csharp
    // Controllers/ProductsController.cs
    using System.Collections.Generic;
    using System.Web.Http;
    using MyWebApp.Models;

    namespace MyWebApp.Controllers
    {
    public class ProductsController : ApiController
    {
    // GET api/products
    public IEnumerable Get()
    {
    // 返回所有产品
    return new List
    {
    new Product { Id = 1, Name = "Product 1", Price = 10.99m },
    new Product { Id = 2, Name = "Product 2", Price = 25.50m }
    };
    }

        // GET api/products/5
        public Product Get(int id)
        {
            // 返回指定 ID 的产品
            return new Product { Id = id, Name = "Product " + id, Price = 10.99m * id };
        }
    
        // POST api/products
        public void Post([FromBody] Product product)
        {
            // 添加新产品
        }
    
        // PUT api/products/5
        public void Put(int id, [FromBody] Product product)
        {
            // 更新指定 ID 的产品
        }
    
        // DELETE api/products/5
        public void Delete(int id)
        {
            // 删除指定 ID 的产品
        }
    }
    

    }
    ```

    • Web API 控制器方法通常返回 HttpResponseMessage 或直接返回数据对象(例如,IEnumerable<Product>)。
    • [HttpGet][HttpPost][HttpPut][HttpDelete] 等属性用于指定 HTTP 方法(GET、POST、PUT、DELETE)。
    • [FromBody] 属性指示参数值应从请求正文中读取。
    • Web API 使用约定来确定 URL 与控制器和操作的映射关系。例如,GET api/products 会调用 ProductsControllerGet() 方法。

六、数据库访问 (Entity Framework)

ASP.NET 应用程序通常需要与数据库交互。Entity Framework (EF) 是微软提供的 ORM(对象关系映射)框架,可以简化数据库访问。

  1. 安装 Entity Framework NuGet 包。 在 Visual Studio 中,右键单击项目,选择“管理 NuGet 程序包”,搜索并安装 "EntityFramework" 或 "Microsoft.EntityFrameworkCore"(对于 .NET Core)。

  2. 创建数据模型类。 (如上面Product类)

  3. 创建 DbContext 类。 DbContext 类表示与数据库的会话,并包含用于查询和操作数据的 DbSet 属性。

    ```csharp
    // Models/MyDbContext.cs
    using System.Data.Entity; // 或者 using Microsoft.EntityFrameworkCore;

    namespace MyWebApp.Models
    {
    public class MyDbContext : DbContext
    {
    public DbSet Products { get; set; }
    //可以添加其他 DbSet 属性以映射到数据库中的其他表
    //配置连接字符串(通常在 Web.config 或 appsettings.json 文件中):
    //在web.config中的 部分:
    //
    //或者webapi项目中的appsettings.json
    /
    "ConnectionStrings": {
    "MyDbContext": "Server=(localdb)\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;MultipleActiveResultSets=true"
    }
    /
    public MyDbContext() : base("name=MyDbContext") // 构造函数,指定连接字符串的名称
    {
    }
    }
    }
    ```

  4. 在控制器中使用 DbContext。

    ```csharp
    //在控制器中使用 DbContext 来查询和操作数据:
    public class ProductsController : ApiController
    {
    private MyDbContext db = new MyDbContext();

      public IEnumerable<Product> Get()
      {
          return db.Products.ToList(); // 查询所有产品
      }
    
       public IHttpActionResult Get(int id) //更推荐返回IHttpActionResult
        {
          var product = db.Products.Find(id);
            if (product == null)
           {
                return NotFound(); // 如果未找到,返回 404 Not Found
            }
            return Ok(product);  //如果找到,返回200 OK及数据
       }
    
      // ... 其他方法
       protected override void Dispose(bool disposing)
       {
           if (disposing)
           {
                db.Dispose(); // 释放 DbContext 资源
          }
           base.Dispose(disposing);
       }
    

    }

    ```

七、其他重要概念

  • 依赖注入 (Dependency Injection): 一种设计模式,用于降低代码之间的耦合度。 ASP.NET MVC 和 Web API 都支持依赖注入。
  • 身份验证和授权 (Authentication and Authorization): ASP.NET 提供了强大的身份验证和授权机制,用于保护您的应用程序。
  • 测试 (Testing): 编写单元测试和集成测试对于确保应用程序的质量至关重要。 ASP.NET MVC 和 Web API 都支持测试。
  • 部署 (Deployment): 将 ASP.NET 应用程序部署到 Web 服务器(例如 IIS)或云平台(例如 Azure)。

八、总结

本教程提供了 ASP.NET Web 开发的入门指南,重点介绍了 ASP.NET MVC 和 Web API。 通过学习本教程,您应该能够:

  • 了解 ASP.NET 的基本概念和开发模型。
  • 设置 ASP.NET 开发环境。
  • 创建基本的 ASP.NET MVC 和 Web API 应用程序。
  • 理解 MVC 应用程序的结构(模型、视图、控制器)。
  • 使用 Razor 语法在视图中显示数据。
  • 使用 Entity Framework 访问数据库。
  • 了解 Web API 的基本原理。
  • 了解路由,依赖注入等常用概念.

这只是 ASP.NET Web 开发的开始。 要深入学习,建议您参考微软官方文档、在线教程和书籍,并进行大量的实践。

THE END