From 3bd40d3b752efece1a53fdfcffe9ca98a4c412e8 Mon Sep 17 00:00:00 2001 From: zhan <2182174962@qq.com> Date: Sun, 26 May 2024 22:19:25 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20240520-WebApi.md" | 32 +++++++ ...70\345\277\203\347\211\271\346\200\247.md" | 69 ++++++++++++++ ...35\350\265\226\346\263\250\345\205\245.md" | 90 +++++++++++++++++++ ...345\233\276\344\271\246\347\232\204api.md" | 60 +++++++++++++ 4 files changed, 251 insertions(+) create mode 100644 "\345\215\240\347\277\212\345\206\233/20240520-WebApi.md" create mode 100644 "\345\215\240\347\277\212\345\206\233/20240521-ASP.NET Core\346\240\270\345\277\203\347\211\271\346\200\247.md" create mode 100644 "\345\215\240\347\277\212\345\206\233/20240523-Startup\347\261\273\344\270\216\344\276\235\350\265\226\346\263\250\345\205\245.md" create mode 100644 "\345\215\240\347\277\212\345\206\233/20240524-\345\205\263\344\272\216\345\233\276\344\271\246\347\232\204api.md" diff --git "a/\345\215\240\347\277\212\345\206\233/20240520-WebApi.md" "b/\345\215\240\347\277\212\345\206\233/20240520-WebApi.md" new file mode 100644 index 0000000..bc6d52b --- /dev/null +++ "b/\345\215\240\347\277\212\345\206\233/20240520-WebApi.md" @@ -0,0 +1,32 @@ +## WebApi + +``` +// 请求用户集合 +get /users + +// 获取指定“用户” +get /users/99 + +// 新增 数据通过请求的主体body传递 +post /users + +// 修改 +put /users/88 + +// 删除 一般具体到数据库中的话,使用软删除,或者叫伪删除 +delete /users/77 +``` + +``` +// 创建api项目 +dotnet new webapi -n 项目名称 + +// 创建类库项目 +dotnet new classlib -n 类库名称 + +// 创建解决方案 +dotnet new sln -n 解决方案名称 + +// 把项目添加到解决方案中 +dotnet sln add 项目地址 +``` \ No newline at end of file diff --git "a/\345\215\240\347\277\212\345\206\233/20240521-ASP.NET Core\346\240\270\345\277\203\347\211\271\346\200\247.md" "b/\345\215\240\347\277\212\345\206\233/20240521-ASP.NET Core\346\240\270\345\277\203\347\211\271\346\200\247.md" new file mode 100644 index 0000000..e5ab58f --- /dev/null +++ "b/\345\215\240\347\277\212\345\206\233/20240521-ASP.NET Core\346\240\270\345\277\203\347\211\271\346\200\247.md" @@ -0,0 +1,69 @@ +## ASP.NET Core核心特性 + +### 解决方案和项目之间的联系 + +1.编译或者打包解决方案的时候,会同时编译或打包其下所有的项目 + +2.如果运行解决方案的话,则会按照编排的(指定的启动项目),分别调用指定项目 + +### 中间件 + +``` +app.Use(async(ctx,next)=> +{ + var forecast = Enumerable.Range(1,10); + await next(); + await ctx.Response.WriteAsync("8800"); +}); + +app.Use(async(ctx,next)=> +{ + var forecast = Enumerable.Range(1,10); + await next(); + await ctx.Response.WriteAsync("小咕叽"); +}); +``` + +跑起来 +``` +dotnet watch --project 具体项目地址 +``` + +### 写一个迷你api + +``` +app.MapGet("/api/users",()=> +{ + var list=new List(); + list.Add(new + { + Id=1, + Username="思航航", + Password=123, + Nickname="群主" + }); + list.Add(new + { + Id=2, + Username="咕叽咕叽", + Password=123, + Nickname="管理员" + }); + return list; +}); +``` + +跑起来 +``` +dotnet run --project 具体项目地址 +``` + +### 其他 + +``` +// 项目1引用项目2 +dotnet add 项目1地址 reference 项目2地址 + +// 给项目添加依赖包 +dotnet add 项目地址 package 依赖包名称 +``` \ No newline at end of file diff --git "a/\345\215\240\347\277\212\345\206\233/20240523-Startup\347\261\273\344\270\216\344\276\235\350\265\226\346\263\250\345\205\245.md" "b/\345\215\240\347\277\212\345\206\233/20240523-Startup\347\261\273\344\270\216\344\276\235\350\265\226\346\263\250\345\205\245.md" new file mode 100644 index 0000000..9e76eff --- /dev/null +++ "b/\345\215\240\347\277\212\345\206\233/20240523-Startup\347\261\273\344\270\216\344\276\235\350\265\226\346\263\250\345\205\245.md" @@ -0,0 +1,90 @@ +## Startup类与依赖注入 + +### Startup类 + +IWebHostBuilder接口有多个扩展方法,其中有一个很重要的是UseStarup方法,它主要向应用程序提供用于配置启动的类,而指定的这个类应具有以下两个方法: + +ConfigureServices:用于向ASP.NET Core的依赖注入容器添加服务 + +Configure:用于添加中间件,配置请求管道 + +这两个方法都会在运行时被调用,且在应用程序的整个生命周期内,只执行一次。其中ConfigureServices方法是可选的,而Configure方法则是必选的。在程序启动时,它会执行ConfigureServices 方法(如果有),将指定的服务放入应用程序的依赖注入容器中,然后再执行Configure方法,向请求管道中添加中间件 + +ConfigureServices方法有一个IServiceCollection类型的参数,使用它能够将应用程序级别的服务注册到ASP.NET Core默认的依赖注入容器中。Configure方法默认包含一个IApplicationBuilder类型的参数,通过它可以添加一个或多个中间件,所有添加的中间件将会对传入的HTTP请求进行处理,并将处理后的结果返回为发起请求的客户端 + +当在ConfigureServices方法中向依赖注入容器添加了服务后,在后面的Configure 方法中就可以通过参数将需要的服务注入进来,如上面的Configure方法中INoteRepository 类型的参数 + +在配置启动时,除了使用IWebHostBuilder的UseStartup方法引用Startup类外,还可以接使用IWebHostBuilder的ConfigureService和 Configure 两个扩展方法以内联的方式分别实Startup类中对应的两个方法 + +### 依赖注入 + +ASP.NET Core框架内部集成了自身的依赖注入容器。相比第三方依赖注入容器,它自带的依赖注入容器并不具备第三方容器所具有的高级功能,但它仍然是功能强大、简单,而且容易使用,此外,它的效率要更高 + +在ASP.NET Core中,所有被放入依赖注入容器的类型或组件称为服务。容器中的服务有两种类型:第一种是框架服务,它们是 ASP.NET Core框架的组成部分,如IApplicationBuilder、IHostingEnvironment和ILoggerFactory等;另一种是应用服务,所有由用户放到容器中的服务都属于这一类 + +为了能够在程序中使用服务,首先需要向容器添加服务,然后通过构造函数以注入的方式注入所需要的类中。若要添加服务,则需要使用Startup类的ConfigureServices方法,该方法有一个IServiceCollection类型的参数,它位于Microsoft.Extensions.DependencyInjection 命名空间下 + +ServiceDescriptor类描述一个服务和它的实现,以及其生命周期,正如上例中的构造函数所表明的,前两个参数分别是接口及其实现的类型,而第3个参数则是指明它的生命周期 + +在ASP.NET Core内置的依赖注入容器中,服务的生命周期有如下3种类型: + +Singleton:容器会创建并共享服务的单例,且一直会存在于应用程序的整个生命周期内 + +Transient:每次服务被请求时,总会创建新实例 + +Scoped:在每一次请求时会创建服务的新实例,并在这个请求内一直共享这个实例当每次在容器中添加服务时,都需要指明其生命周期类型。当服务的生命周期结束时,它就会被销毁 + +### 小练习 + +#### 抽离 + +在Program.cs里写: + +``` +var builder = WebApplication.CreateBuilder(args); + +var app = builder.Build(); + +App.UserRoute(app); + +app.Run(); +``` + +在Program.cs的同级层的文件App.cs文件里写: + +``` +public static class App +{ + public static void UserRoute(WebApplication app) + { + + app.MapGet("/api/user1",async(ctx)=> + { + await ctx.Response.WriteAsync("user1"); + }); + app.MapGet("/api/user2",async(ctx)=> + { + await ctx.Response.WriteAsync("user2"); + }); + app.MapGet("/api/user3",async(ctx)=> + { + await ctx.Response.WriteAsync("user3"); + }); + app.MapGet("/api/user4",async(ctx)=> + { + await ctx.Response.WriteAsync("user4"); + }); + app.MapGet("/api/user5",async(ctx)=> + { + await ctx.Response.WriteAsync("user5"); + }); + } +}; +``` + +在api.http中测试: + +``` +### +GET http://localhost:5081/api/user5 HTTP/1.1 +``` \ No newline at end of file diff --git "a/\345\215\240\347\277\212\345\206\233/20240524-\345\205\263\344\272\216\345\233\276\344\271\246\347\232\204api.md" "b/\345\215\240\347\277\212\345\206\233/20240524-\345\205\263\344\272\216\345\233\276\344\271\246\347\232\204api.md" new file mode 100644 index 0000000..71537bc --- /dev/null +++ "b/\345\215\240\347\277\212\345\206\233/20240524-\345\205\263\344\272\216\345\233\276\344\271\246\347\232\204api.md" @@ -0,0 +1,60 @@ +在Program.cs中写: + +``` +namespace mm.Api; + +public static class Program +{ + public static void Main(string[] args) + { + CreateWebHostBuilder(args).Build().Run(); + } + public static IHostBuilder CreateWebHostBuilder(string[] args) + { + return Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(CreateWebHostBuilder=> + { + CreateWebHostBuilder.UseStartup(); + }); + } +} +``` + +在Startup.cs中写: + +``` +namespace mm.Api; + +public class Startup +{ + // 注册或者添加中间件 + public void Configure(IApplicationBuilder app) + { + app.UseRouting(); + app.UseEndpoints(endpoints => + { + endpoints.MapControllers(); + }); + } + // 准备用于依赖注入的服务 + public void ConfigureServices(IServiceCollection services) + { + services.AddControllers(); + } +} +``` + +在BooksController.cs中写: + +``` +using Microsoft.AspNetCore.Mvc; + +namespace mm.Api; +[Route("[controller]")] +public class BooksController:ControllerBase +{ + public IActionResult Index() + { + return Ok("8888"); + } +} +``` \ No newline at end of file -- Gitee