diff --git "a/\351\255\217\345\255\220\345\215\216/20240520-ASP_NET.md" "b/\351\255\217\345\255\220\345\215\216/20240520-ASP_NET.md" new file mode 100644 index 0000000000000000000000000000000000000000..390a6601fbf56aae98d29e9d33d44d532f1de13a --- /dev/null +++ "b/\351\255\217\345\255\220\345\215\216/20240520-ASP_NET.md" @@ -0,0 +1,57 @@ +### 一、ASP.NET Core简介 +ASP.NET Core是一个开源、跨平台的高性能Web框架,用于构建现代、云端优化的Web应用和服务。具有以下特点: +- 跨平台 +- 开源 +- 高性能 +- 模块化和灵活性:采用模块化设计,开发者可以根据需要选择和配置中间件组件,构建高度定制化的请求处理管道- 统一的编程模型 +- 依赖注入:内置了依赖注入(DI)框架,简化了应用的配置和管理,提高了代码的可维护性和可测试性 +- 现代开发工具 +- 云优化 +- 兼容性和迁移 +### 二、设置开发环境 +使用.NETCoreCLI可以创建一个.NETCore应用 +~~~js +-o //用于放置生成的输出的位置。 默认为当前目录。 +dotnet new console -o HelloConsole //控制台应用程序 +dotnet new webapi -o HelloApi //ASP.NET Core Web API +dotnet new classlib -o HelloClassLibrary //类库 +// -o 表示要创建的位置 +~~~ +除此之外,.NETCoreCLI还有其他命令: + +### 三、创建第一个API项目 +#### 1.使用vscode +~~~js +// 恢复项目中的NuGet包依赖项: +dotnet restore + +// 编译项目: +dotnet build + +// 运行项目: +dotnet run + +// 测试项目: +dotnet test + +// 发布项目: +dotnet publish -c Release -o +-c Release指定发布配置为Release模式,-o指定输出文件夹 + +// 添加包: +dotnet add package + +// 添加项目引用: +dotnet add reference + +// 移除引用: +dotnet remove + +// 清理项目: +dotnet clean +~~~ + +#### 2.使用VisualStudio +1. 选择“ 文件 ”→“ 新建 ”→“ 项目 ” +2. 在弹出的新建项目对话框中选择左侧的“VisualC#”,继续选择“.NET Core”;在右侧选择“ASP.NET Core Web应用程序”,输入新项目名称 +3. 选择“API”模板,并且选择“不进行身份验证” \ No newline at end of file diff --git "a/\351\255\217\345\255\220\345\215\216/20240521-ASP\344\270\255\351\227\264\344\273\266.md" "b/\351\255\217\345\255\220\345\215\216/20240521-ASP\344\270\255\351\227\264\344\273\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..af81d99d3eeee64d492e01294b5a4e9704a7ca85 --- /dev/null +++ "b/\351\255\217\345\255\220\345\215\216/20240521-ASP\344\270\255\351\227\264\344\273\266.md" @@ -0,0 +1,56 @@ +### 一、解决方案和项目之间的关系 +1. 编译或打包解决方案时,会同时编译或打包其下所有项目 +2. 如果运行解决方案,会按编排的(指定的启动项目),分别编译该项目 +3. 在根目录下编译项目会一起编译解决方案,而在项目目录下编译却只会编译该项目 + +### 二、在项目中引用另一个项目 +~~~js +dotnet add.\MyApi\ reference .\ApiDemo\ +// 在MyApi项目中引用ApiDemo项目 +// 则在MyApi.csproj文件中会出现以下代码 + + + +~~~ + +### 三、添加依赖包 +~~~js +dotnet add .\MyApi\ package package_name +// 则在MyApi.csproj文件中会出现以下代码: + + +// 也可以根据MyApi.csproj文件还原包 +dotnet restore +~~~ + +### 四、编译一个简单的api请求 +1. 编译代码 +~~~js +// 在program.cs中 +// 使用了 MapGet 方法来指定了一个 GET 请求的路由路径为 "/api/users" +app.MapGet("/api/users",()=>{ + // 创建了一个 List 类型的列表对象,用于存储动态类型的元素 + var list = new List(); + list.Add(new{ + Id=1, + }); + list.Add(new{ + Id=2, + }); + return list; +}); +~~~ +### 五、中间件 +1. 添加中间件 +~~~js +// 接受 HttpContext 对象 ctx 和一个 next 委托作为参数 +app.Use(async (ctx,next)=>{ + // 创建变量forecast,其中存储包含1到10的整数序列 + // Enumerable.Range 方法用于生成指定范围内的整数序列 + var forecast = Enumerable.Range(1,10); + // 调用下一个中间件或终结点,使得控制权传递给下一个中间件或请求处理终结点 + await next(); + // 调用下一个中间件或终结点,使得控制权传递给下一个中间件或请求处理终结点 + ctx.Response.WriteAsync("C929星球"); +}); +~~~ \ No newline at end of file diff --git "a/\351\255\217\345\255\220\345\215\216/20240523-\344\276\235\350\265\226\346\263\250\345\205\245.md" "b/\351\255\217\345\255\220\345\215\216/20240523-\344\276\235\350\265\226\346\263\250\345\205\245.md" new file mode 100644 index 0000000000000000000000000000000000000000..b621dc011065a1a02d61b48a86c8fbceeb9d1085 --- /dev/null +++ "b/\351\255\217\345\255\220\345\215\216/20240523-\344\276\235\350\265\226\346\263\250\345\205\245.md" @@ -0,0 +1,16 @@ + +### 依赖注入 +依赖注入是一种新的设计模式,通过正确使用依赖注入的相关技术,可以降低系统耦合度,增加系统的可扩展性。 + +### 实例的生命周期 +.NET Core DI 为我们提供的实例生命周其包括三种: +- Transient: 每一次GetService都会创建一个新的实例 +- Scoped: 在同一个Scope内只初始化一个实例 ,可以理解为( 每一个 request级别只创建一个实例,同一个http request会在一个 scope内) +- Singleton :整个应用程序生命周期以内只创建一个实例 +### 方法 +- `Main` 方法:这是应用程序的入口点。它调用 `CreateHostBuilder(args).Build().Run()` 来初始化和启动 Web 主机。 +- `CreateHostBuilder` 方法:配置 Web 主机构建器。它使用 `WebHost.CreateDefaultBuilder(args)` 创建默认的构建器,该构建器加载配置(如 `appsettings.json`)并设置日志记录等。然后,它调用 `.UseStartup()` 来指定应用程序启动时使用的启动类。 +- `Startup` 类:定义了 ASP.NET Core 应用程序的启动逻辑。 +- `ConfigureServices` 方法:在服务容器中注册应用程序所需的服务和依赖项。`services.AddControllers();` 添加了 MVC 控制器服务,这是 ASP.NET Core MVC 框架的核心部分。 +- `Configure` 方法:配置应用程序的请求处理管道。`app.UseRouting()` 启用路由中间件,它是处理请求 URL 并将其与应用程序中的路由匹配的关键组件。`app.UseEndpoints(endpoints => { endpoints.MapControllers(); })` 设置终结点路由中间件,它负责将请求映射到 MVC 控制器。 +- `MapControllers` 方法:一个扩展方法,它告诉终结点路由中间件如何将请求映射到应用程序中的控制器。 \ No newline at end of file diff --git "a/\351\255\217\345\255\220\345\215\216/20240524-\344\276\235\350\265\226\346\263\250\345\205\245(\347\256\200\345\214\226\347\211\210).md" "b/\351\255\217\345\255\220\345\215\216/20240524-\344\276\235\350\265\226\346\263\250\345\205\245(\347\256\200\345\214\226\347\211\210).md" new file mode 100644 index 0000000000000000000000000000000000000000..bc1507fd62c4d5863771cd74a72a1a07fce0af64 --- /dev/null +++ "b/\351\255\217\345\255\220\345\215\216/20240524-\344\276\235\350\265\226\346\263\250\345\205\245(\347\256\200\345\214\226\347\211\210).md" @@ -0,0 +1,70 @@ +1. 入口程序 +~~~c# + using Microsoft.AspNetCore; + // 1. 命名空间声明 + namespace Api + { + // 2. 类声明 + // Program类是应用程序的入口点,应用程序通常从Main方法开始执行 + public class Program + { + public static void Main(string[] args) + { + CreateWebHostBuilder(args).Build().Run(); + // CreateWebHostBuilder(args)方法被调用来创建一个IWebHostBuilder对象 + // Build()方法被调用在IWebHostBuilder对象上,生成一个IWebHost对象 + // Run()方法启动Web主机,使应用程序开始监听Web请求 + } + public static IWebHostBuilder CreateWebHostBuilder(string[] args) + { + return WebHost.CreateDefaultBuilder(args).UseStartup(); + // CreateWebHostBuilder方法用于配置和创建一个Web主机生成器 + // UseStartup()方法指定Startup类作为应用程序的启动类 + } + } + } +~~~ +2. 启动类 +~~~c# + // Startup类是ASP.NET Core应用程序启动时调用的类,用于配置应用程序服务和HTTP请求管道 + public class Startup + { + // 用于添加和注册中间件 + public void Configure(IApplicationBuilder app) + { + app.UseRouting(); //添加路由中间件 + // 配置终结点路由 + app.UseEndpoints(endpoints => { + endpoints.MapControllers(); + // 添加控制器终结点到请求管道中,这使得控制器能够处理HTTP请求 + }); + } + // 注册准备依赖注入的服务 + // ConfigureServices方法用于配置依赖注入容器,添加应用程序所需的服务 + public void ConfigureServices(IServiceCollection services) + { + services.AddControllers(); //添加MVC控制器相关的服务到依赖注入容器中 + } + } +~~~ +3. 控制器 +~~~c# + namespace Api.Controllers; + + [Route("[controller]")] //定义控制器的路由前缀,即/blogs + // BlogsController类继承自ControllerBase,它是一个用于构建API的基类(不包含视图支持) + public class BlogsController : ControllerBase + { + // 处理对/blogs的GET请求 + public IActionResult Index(){ + return Ok("999"); //返回一个包含字符串"999"的200 OK响应 + } + + [Route("{id}")] //定义Single方法的路由模板 + // 处理对/blogs/{id}的GET请求,接受一个整型参数id + public IActionResult Single(int id) + { + return Ok(id); //返回一个包含id值的200 OK响应 + } + } +~~~ \ No newline at end of file