跳至页脚内容
Iron Academy Logo
C# 应用程序
C# 应用程序

其他类别

使用 ASP.NET Core 创建 C# Web 应用程序

Tim Corey
52m 05s

构建网络应用程序是现代开发人员的一项基本技能,因此了解核心的底层项目结构至关重要。 本文受 Tim Corey 关于"Web API 入门"的视频启发,深入探讨了使用 ASP.NET Core Framework 构建 Web 应用程序的复杂性。

按照蒂姆的见解,我们将探索如何设置、配置和优化您的网络应用程序,充分利用 ASP.NET Core Framework 的全部潜力来构建高效且可维护的网页和 API。无论您是网络开发的新手,还是希望完善自己的技能,本指南都将帮助您驾驭复杂的网络开发工作量,为您提供构建高效、高性能网络应用程序所需的知识。

简介

Tim Corey 在教程的开篇介绍了使用 ASP .NET Core 创建 API 的主题。 他强调了了解 API 基础知识对于构建稳健、可扩展的网络应用程序的重要意义。

Tim 通过解释 API 在现代软件开发中发挥的关键作用,为 Blazor Web 服务器和 Blazor Web 程序集等不同 Web 开发框架之间的通信提供了便利,从而奠定了基础。 即使是 Razor 页面的底层项目类型也是 ASP.NET Core,能够在多个项目中无缝集成各种功能,从而构建网络应用程序。

创建 ASP.NET Core Web API 项目

首先,Tim Corey 演示了如何设置一个新的 ASP.NET Core Web API 项目。 以下是他在视频中概述的步骤:

1.打开 Visual Studio:首先打开 Visual Studio 安装程序,然后选择创建新项目选项。

打开Visual Studio

2.选择 API 模板:从项目模板中选择 "ASP.NET Core Web API",然后单击 "下一步"。

选择API模板

3.配置项目设置:输入项目名称、选择位置和解决方案名称。

配置项目设置

4.附加信息:选择 .NET Framework,选择验证类型,他建议不要更改其他设置。

附加信息

5.创建项目:单击 "创建 "以生成带有默认配置和必要代码的项目。

该设置为探索 API 开发奠定了基础,Visual Studio 生成的基本结构包括 Program.cs、控制器文件夹和 appsettings.json 等基本组件。

默认 API 应用程序概述

在 Tim Corey 的视频中 5:57 处,他概述了 ASP.NET Core 生成的默认 API 应用程序。

运行默认应用程序

Tim 首先运行了默认应用程序,以说明开发人员可以得到什么。 执行时,项目会构建 API、下载必要的 NuGet 软件包并启动网页。 该初始设置展示了 API 的基本结构和功能,未作任何修改。

运行默认应用程序

与 API 的交互

启动的网页由 Swagger(现称为 OpenAPI)提供支持。 Swagger 提供了与 API 交互的用户友好界面。 让开发人员和非开发人员都能轻松理解和测试 API 端点。 该界面尤其有助于直观地了解 API 的工作原理和文档编制目的。

探索 Swagger.

Swagger 展示了 API 中的可用端点。 在默认设置中,"天气预报 "端点是预配置端点之一。 通过点击该端点并使用 "试用 "功能,用户可以执行 API 调用并查看响应。 此响应包括一个 JSON 格式的天气预报,演示了如何从 API 返回数据。

Tim 在 8:32 着重指出,虽然直接从浏览器读取原始 JSON 数据可能具有挑战性,但 Swagger 的文档覆盖使其更易于消化。 文档提供有关端点的详细信息,包括请求方法(GET、POST 等)、返回数据的结构以及任何所需的参数。

JSON 文档和 API 版本

Swagger 还会生成一个 JSON 文件,正如 Tim 在 9:10 所指出的那样,该文件以机器可读的格式记录了 API。 该文档对于需要与 API 交互的其他应用程序至关重要,因为它描述了可用端点、数据模式和预期响应。

Tim 在 9:29 分指出了 API 中版本控制的重要性。默认设置包括一个版本指示器,暗示可能存在多个 API 版本。 版本对于保持向后兼容性至关重要。 当对 API 的更改可能会破坏现有客户端时,拥有多个版本可以让开发人员在不影响现有用户的情况下引入新功能或更改。

什么是 API?

在 11:22 处,Tim Corey 解释了 API(应用程序编程接口)在现代网络开发中的基本作用。 他强调了这些工具在管理和保护不同软件组件之间的数据交换方面的重要性。

API 的目的

Tim 强调,大多数应用程序都围绕数据检索、操作和显示展开。 API 是用户界面和底层数据之间的中介,为数据访问提供了安全高效的手段。 这种集中化是至关重要的,原因有以下几点:

1.安全性:API 提供了一种管理数据访问的安全方法。 移动和客户端应用程序不应直接连接数据库,以避免在客户端代码中嵌入数据库凭据,从而带来重大安全风险。

2.抽象:API 从用户界面中抽象出数据层,使不同的客户端应用程序(移动应用程序、Web 应用程序、桌面应用程序)能够与相同的数据源交互,而无需暴露数据库或其凭据。

在不同框架中的通用性

Tim 指出,API 并不局限于特定的框架或语言。 例如,C# API 可以被 Angular、React 或 Vue 等 JavaScript 框架访问,展示了 API 的跨平台功能。

API Web 应用程序代码审查

在 15:21 处,Tim Corey 开始详细讲解 ASP.NET Core API 项目的结构和功能。 以下是在创建 API 网络应用程序时使用 HTTP 服务器和服务器端技术时必须了解的要点:

1.Program.cs 概述

Tim 回顾了 Program.cs,指出它可以构建网络应用程序并配置各种服务,如控制器的依赖注入和 Swagger (OpenAPI)。 在构建和运行应用程序之前,代码会设置必要的服务。

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

2.环境配置

Tim解释了环境设置如何在launchSettings.json中配置。 默认环境设置为 "开发",用于本地测试,启用 Swagger。 在生产中,出于安全考虑,Swagger 通常是禁用的,但可以通过移除开发检查来启用。

{
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "WebApplication": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

3.HTTPS 重定向和控制器

Tim 指出了 HTTPS 重定向和控制器的映射。 此设置可确保正确配置 API 路由。 他倾向于在 HTTP 请求和响应路由中使用 "api "前缀,以提高清晰度。

4.天气预报控制器

Tim深入探讨了WeatherForecastController.cs,并强调了路由配置。 默认路由是/weatherforecast,可以修改为包含一个"api"前缀。 控制器使用 HTTP GET 获取数据,可以通过指定路由访问这些数据。

using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    [HttpGet]
    public IEnumerable<WeatherForecast> Get()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = Random.Shared.Next(-20, 55),
            Summary = Summaries[Random.Shared.Next(Summaries.Length)]
        })
        .ToArray();
    }
}

public class WeatherForecast
{
    public DateTime Date { get; set; }

    public int TemperatureC { get; set; }

    public string? Summary { get; set; }
}
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    [HttpGet]
    public IEnumerable<WeatherForecast> Get()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = Random.Shared.Next(-20, 55),
            Summary = Summaries[Random.Shared.Next(Summaries.Length)]
        })
        .ToArray();
    }
}

public class WeatherForecast
{
    public DateTime Date { get; set; }

    public int TemperatureC { get; set; }

    public string? Summary { get; set; }
}

5.HTTP动词和路由

Tim 解释了 HTTP 动词(GET、POST、PUT、DELETE)如何定义 API 端点。 对于 GET 请求,浏览器会调用控制器中的指定方法。 其他动词需要使用 Postman 等工具进行测试。

创建 API 控制器

Tim 演示了创建 API 控制器的过程:

1.添加控制器:右键单击 "控制器 "文件夹,然后选择 "添加 > 控制器"。

2.选择 API 控制器:选择 "API 控制器 - 空 "并提供控制器名称。

添加控制器

3.定义操作:在控制器中实施操作以处理不同的 HTTP 请求。 Tim 提供了代码示例,说明如何定义 GET、POST、PUT 和 DELETE 方法。 有关详细代码,请参阅 26:25 开始的视频。

本实践演示可帮助开发人员了解如何构建和配置 API 控制器,以处理各种类型的请求。

REST API

Tim Corey 介绍了 REST(表征状态转移)及其原理:

1.什么是 REST:REST 是一种设计网络应用程序的架构风格。 它依赖于无状态通信,并使用标准 HTTP 方法(GET、POST、PUT、DELETE)执行操作。

2.RESTful 原则:RESTful API 使用 URL 模式来表示资源。 例如,/users/5检索ID为5的特定用户。

3.REST 合规性:Tim 指出,实现完全的 REST 合规性可能具有挑战性,因为 REST 最初只是一种理论模型。 不过,遵循 REST 原则可以使 API 更直观、更一致。

Tim 强调说,在力求符合 REST 标准的同时,应从实际出发指导应用程序接口的设计,以确保可用性和功能性。

最小 API 应用程序

Corey 介绍了 Minimal API,这是一种在 ASP.NET Core 中进行 API 开发的简化方法:

1.设置 Minimal API:Tim 演示了如何通过在设置项目时取消选中 "使用控制器 "选项来创建 Minimal API 项目。

  1. 简化代码:Minimal API消除了对控制器和路由属性的需求,允许开发者在app.MapPost()等方法定义端点。

3.代码示例:Tim 提供了一个代码示例,其中一行代码定义了一个端点。 他演示了如何以最少的配置将 GET 请求映射到端点。

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

最小化 API 的设计目的是简化开发,尤其是针对小型应用程序或微服务。

为什么要使用 Minimal API.

Tim 讨论了 Minimal API 的好处:

1.创建新项目:Tim 创建了一个新的 Web API 项目,但这次他在附加信息中取消了使用控制器选项。 这样,创建项目时就可以使用最少的 API。

创建Minimal API

2.减少模板:最小化 API 无需控制器和额外的路由配置,从而减少了模板代码的数量。

3.简洁性:它们为简单的 API 提供了更直接的方法,使代码更容易理解和维护。

4.微服务:最小 API 对于微服务特别有用,在微服务中,API 只需要执行有限的操作集,而不需要传统控制器的完整功能集。

Tim 承认,虽然 Minimal API 在某些情况下是有益的,但传统控制器可能更适合大型或更复杂的应用程序。

最佳实践、总结和结束语

Tim Corey 以 API 开发的最佳实践结束了他的教程:

  1. 关注点分离:避免将业务逻辑直接放置在Program.cs或控制器动作中。 在翻译过程中,应避免使用.NET、Java、Python 或 Node js,而应将逻辑移至独立的类库或服务中,以保持代码的整洁并遵守 SOLID 原则。

2.API作为用户界面:将API视为用户界面,重点是使其直观且文档齐全。 Tim 强调了清晰的文档和有效的 API 设计的重要性。

3.Swagger 和文档:利用 Swagger 进行 API 文档和版本管理。 Tim 解释了如何使用代码中的 XML 注释来生成详细的 API 文档。

4.其他考虑因素:考虑缓存、速率限制和其他因素,以提高 API 性能和安全性。

Tim 鼓励开发人员探索不同的项目类型和工具,强调了解 API 的价值及其在现代软件开发中的作用。

结论

Tim Corey 的视频提供了在 ASP.NET Core 中创建和管理 API 的详尽指南,涵盖了 RESTful 和 Minimal API 方法。 他的见解不仅能帮助开发人员掌握 API 设计的要点,还能为实施有效的解决方案提供实用的建议。

有关 C# 和其他项目类型的更多深入教程和见解,请务必访问 Tim Corey 的 YouTube 频道IIAmTimCorey

Hero Worlddot related to 使用 ASP.NET Core 创建 C# Web 应用程序
Hero Affiliate related to 使用 ASP.NET Core 创建 C# Web 应用程序

分享您的所爱,赚取更多收入

您为使用 .NET、C#、Java、Python 或 Node.js 的开发人员创建内容吗?将您的专业知识转化为额外收入!

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我