.NET 6开发TodoList应用实现系列背景

 更新时间:2022年01月25日 13:01:42   作者:CODE4NOTHING  
这篇文章主要介绍了.NET 6开发TodoList应用实现系列背景,NET 6是一个很优秀的框架,这一点自从我最开始接触.NET Core 2起一年一年进化到现在,就深切地感受到,那好东西就拿出来和大家分享一下,下面来看一下文章的学习介绍吧

前言:

想到要写这样一个系列博客,初衷有两个:一是希望通过一个实践项目,将.NET 6 WebAPI开发的基础知识串联起来,帮助那些想要入门.NET 6服务端开发的朋友们快速上手,对使用.NET 6开发后端服务的技术全貌有一个基本的认识和掌握,顺便把自己的技能树检查一遍;二是希望为国内的.NET环境有一些小小的帮助,最早我自己是做C#桌面应用出身的,但是随着互联网产业的繁盛和微软早年间的固执,使得国内的.NET开发环境收缩到几个固定的领域,以致于很多人今天依然认为C#和.NET不适合做大型的企业级应用,这个观念需要改变了。我无意比较技术和语言之间的好坏,只是更愿意看到国内的技术环境也能呈现出百家争鸣的状态。经过微软这么多年的改变和进步,.NET 6是一个很优秀的框架,这一点自从我最开始接触.NET Core 2起一年一年进化到现在,就深切地感受到,那好东西就拿出来和大家分享一下。

1.列说明

在这个系列博客中,我将会使用.NET 6从头开始一步一步开发一个TodoList单体应用,在这个过程中尽可能将多的知识点独立成每篇文章,最后将应用通过Docker进行打包,并使用GithubActionAzure Container Instance服务实现CI/CD。

选择TodoList的原因是这个项目足够简单,但是也足够去覆盖我希望覆盖到的知识点,对于读者来说,有以下一些建议的前置要求:

  • 需要会写C#,不需要.NET (Core)相关的开发经验。
  • 需要后端服务的开发经验,对基本的服务端相关特性有一定的认识。
  • 有对Clean Architecture的基本理解。

2.系列导航

2.1 使用.NET 6开发TodoList应用文章索引

附:.NET 6 Web API项目代码上的变化

2.1.1创建项目

mkdir ProjectName && cd ProjectName
dotnet new sln -n SampleApi
dotnet new project -f net6.0 -n SampleApi -o SampleApi
dotnet sln SampleApi.sln add SampleApi/SampleApi.csproj
dotnet restore
dotnet run -p SampleApi/SampleApi.csproj

2.1.2.NET 6 WebAPI Program.cs的变更

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllers();
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.1.3Change 1: Top-level statements

顶级声明使得我们在编写Program类时可以不用再定义该类,省略Main函数定义,直接开始写方法体。编译器会在编译阶段为我们自动加上命名空间和相关定义。

2.1.4Change 2: Implicit using directives

隐式using指令是编译器根据项目类型,在编译阶段自动生成一个名为CompanyEmployees.GlobalUsings.g.cs的文件,

内容如下:

// <auto-generated/>
global using global::Microsoft.AspNetCore.Builder;
global using global::Microsoft.AspNetCore.Hosting;
global using global::Microsoft.AspNetCore.Http;
global using global::Microsoft.AspNetCore.Routing;
global using global::Microsoft.Extensions.Configuration;
global using global::Microsoft.Extensions.DependencyInjection;
global using global::Microsoft.Extensions.Hosting;
global using global::Microsoft.Extensions.Logging;
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Net.Http.Json;
global using global::System.Threading;
global using global::System.Threading.Tasks;


也可以在CompanyEmployees.csproj工程配置文件中修改以下属性,禁用全局隐式using指令这一特性:

<!-- <ImplicitUsings>enable</ImplicitUsings> -->
<ImplicitUsings>disable</ImplicitUsings>


2.1.5Change 3: No Startup class

到了.NET 6,陪伴我们好几个版本至今的ConfigureServices and Configure方法终于消失了,取而代之的是这两部分的配置都集中在了Program.cs中。曾经写过.NET Core WebAPI的小伙伴不难看出来现在应该写在哪里。

对于一些大型项目来说,这两部分我们肯定不能就这样写在Program.cs里面,后面将会想办法把这两部分单独拆开进行配置。

当然,老版本的含有Startup.cs的项目在.NET 6下打开没有任何问题。

2.2 关于Pipeline的一些知识点

2.2.1Pipeline Sequence

  • ExceptionHandler
  • HSTS
  • HttpsRedirection
  • Static Files
  • Routing
  • CORS
  • Authentication
  • Authorization
  • Custom Middlewares
  • Endpoint Configuration

2.2.2app.Run和app.Use

app.Run用于终止Pipeline的链式调用并向客户端返回

public static void Run(this IApplicationBuilder app, RequestDelegate handler);
public delegate Task RequestDelegate(HttpContext context);


app.Use用于向Pipeline中插入一段逻辑作为链式调用的其中一个环节

public static IApplicationBuilder Use(this IApplicationBuilder app, Func<HttpContext,
Func<Task>, Task> middleware);


2.2.3app.Map和app.MapWhen

这两个方法都是用于在middleware的链式调用中进行分支Pipeline调用链处理。

public static IApplicationBuilder Map(this IApplicationBuilder app, PathString
pathMatch, Action<IApplicationBuilder> configuration)
  
public static IApplicationBuilder MapWhen(this IApplicationBuilder app,
Func<HttpContext, bool> predicate, Action<IApplicationBuilder> configuration)


app.MapGet、app.MapPost、app.MapPut、app.Delete、app.MapMethods

在.NET 6中一个新增的特性叫做Minimal APIs,允许应用程序以这种形式响应客户端的请求,在快速构建微服务应用的过程中十分好用,在这个系列里,因为构建的是一个单体应用,这部分知识点我打算放到第二个系列关于微服务开发实践中去,看有没有更合适的场景去展示。

到此这篇关于.NET 6开发TodoList应用实现系列背景的文章就介绍到这了,更多相关NET 6开发TodoList实现系列背景内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Asp.Net网站优化系列之数据库的优化措施与索引优化方法

    Asp.Net网站优化系列之数据库的优化措施与索引优化方法

    索引的作用就类似于书的目录,书的目录会按照章节的顺序排列,会指想某一张的位置。这样如果在一本数百页的书里面查找某个章节位置的时候,我们就可以只扫描书的目录,扫描的范围缩小了n倍,查询的效率自然就提高了。
    2010-06-06
  • .NET Framework常用ORM框架iBatis.Net操作数据库的方法

    .NET Framework常用ORM框架iBatis.Net操作数据库的方法

    iBatis.Net 是一个轻量级的 ORM 框架,它允许开发者通过直接编写 SQL 查询来操作数据库,并将查询结果映射到对象模型中,本文将通过实际的代码示例,详细介绍如何在 .NET 环境中使用 iBatis.Net 进行数据库操作,感兴趣的朋友一起看看吧
    2024-08-08
  • .net非托管资源的回收方法

    .net非托管资源的回收方法

    这篇文章主要介绍了.net非托管资源的回收方法,以实例形式详细分析归纳了.net非托管资源的两种回收方法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • 在Code First模式中自动创建Entity模型

    在Code First模式中自动创建Entity模型

    这篇文章介绍了在Code First模式中自动创建Entity模型的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 在asp.net core中使用类似Application的服务的实现

    在asp.net core中使用类似Application的服务的实现

    这篇文章主要介绍了在asp.net core中使用类似Application的服务的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • asp.net实现的计算网页下载速度的代码

    asp.net实现的计算网页下载速度的代码

    刚看到有人给出asp.net实现的计算网页下载速度的方法,本方法未经本人测试,不知道能否可靠性如何。准确来说,这只是个思路吧
    2013-03-03
  • aspnet_regiis.exe命令使用方法

    aspnet_regiis.exe命令使用方法

    本文主要介绍各个命令的对应的含义,以及简单说明具体的用法,希望对大家有所帮助。
    2016-05-05
  • asp.net 编译器错误信息: CS0006: 未能找到元数据文件 该死的.NET

    asp.net 编译器错误信息: CS0006: 未能找到元数据文件 该死的.NET

    今天公司新上一台志强虚拟主机 所有配置都好了 给客户调整.net 出现了报错
    2009-06-06
  • 更改.NET中的默认时区的操作方法

    更改.NET中的默认时区的操作方法

    除了"在操作系统中修改时区信息,然后重启.NET应用程序,使其生效"之外,如何在不修改操作系统时区的前提下,修改.NET中的默认时区呢,下面小编给大家分享更改.NET中的默认时区的操作方法,感兴趣的朋友一起看看吧
    2024-06-06
  • asp.net(c#)做一个网页数据采集工具

    asp.net(c#)做一个网页数据采集工具

    最近做一个网站,该网站需要添加4000多 产品信息,如果用人工方法去别的网站copy那至少要花费半月时间才能完成,所以我个办法使用c#作出来了一个网页数据采集软件.
    2009-12-12

最新评论