使用.NET8实现Web API

使用.NET8实现Web API

码农世界 2024-05-21 前端 67 次浏览 0个评论

目录

  • 1、环境准备
    • 1.1、从官网下载及安装VS2022社区版
    • 1.2、下载及安装asp.net core的运行时及IIS Module
    • 2、WebAPI工程创建
      • 2.2 推荐的库
        • 2.2.1 数据库篇
          • 2.2.1.1、 SQLSugar
          • 2.2.1.2、 OracleAccess
          • 2.2.2、IOC篇
            • 2.2.2.1、autofac
            • 2.2.2.2、使用自带的容器
            • 2.2.3、日志记录篇
              • 2.2.3.2 nlog
              • 2.2.4 其他
                • 2.2.4.1 设置

                  1、环境准备

                  1.1、从官网下载及安装VS2022社区版

                  可从官网下载VS2022社区版本,并进行安装。下载链接:官网VS2022社区版本链接

                  【说明】去年(2023年)底,微软发布了NET8,为长期支持版本。目前长期支持的版本为:NET6和NET8。所以建议直接使用NET8。在VS2022安装时,默认的NET版本就是NET8。

                  1.2、下载及安装asp.net core的运行时及IIS Module

                  安装完成VS2022后,需要额外安装Core运行时及IIS的模块。

                  1、下载及安装运行时以及IIS的模块

                  直接在网上输入: windows hosting bundle或托管捆绑包。找到官网就能下载,下载完成后进行安装。

                  【说明】先在本机完成安装IIS,否则还得折腾。

                  2、完成安装

                  安装完成后,在IIS的模块中应该能够看到AspNetCoreModuleV2

                  3、IIS设置

                  因为要支持跨平台性,微软推出“Kestrel”服务,替代IIS承载asp.net core等Web服务。因此IIS的web承载功能就没用了,IIS只是一个请求转发的功能,类似Nginx。所以,需要设置IIS的程序池进行相关设置。

                  创建一个新的程序应用池,CLR版本选择“无托管代码”,如下图所示。使用asp.net core发布的网站,选择应用程序池时,选择刚才创建的这个。

                  在发布asp.net core的web程序时,选择刚才设置的程序池

                  以上工作完成后,就进入Web API的正式创建了

                  2、WebAPI工程创建

                  新建项目–>选择ASP.NET Core Web API

                  选择相应的信息后,点击创建既可

                  一些默认的配置需要优化下。以便更快的上手。

                  ## 2.1 创建API服务

                  1、Controllers–>添加–>控制器

                  选择API控制器

                  2.2 推荐的库

                  2.2.1 数据库篇

                  2.2.1.1、 SQLSugar

                  一般NET会使用三个ORM的框架:EF、SQLSugar、Drapper。这三个基本大差不差,推荐使用SQLSugar。

                  这里重点讲一下SQLsugar,

                  在program.cs文件中,直接写入如下代码,然后在需要用到的地方进行

                  //第2步:设置第三方ORM-SQLSugar
                  //注册上下文
                  builder.Services.AddHttpContextAccessor();
                  //注册SqlSugar用AddScoped
                  builder.Services.AddScoped(s =>
                  {
                      //Scoped用SqlSugarClient 
                      SqlSugarClient sqlSugar = new SqlSugarClient(new ConnectionConfig()
                      {
                          DbType = SqlSugar.DbType.Oracle,
                          ConnectionString = builder.Configuration["DBConnectStr"],//在appsettings.json配置文件中的字符串设置
                          IsAutoCloseConnection = true,
                      },
                     db =>
                     {
                         db.Aop.OnLogExecuting = (sql, pars) =>
                         {
                             //可以进行日志记录之类的工作
                         };
                     });
                      return sqlSugar;
                  });
                  
                  2.2.1.2、 OracleAccess

                  若不使用ORM等第三方的库,则使用Oracle的库“ManagedDataAccess”。这个的好处是不用关心32还64位的问题。

                  2.2.2、IOC篇

                  IOC就是实例的创建,交给了容器。由容器创建实例,一般而言。项目中本身也包含此功能:Microsoft.Extention.DependencyInjection。既可以使用自带的,也可以使用第三方的。第三方使用比较多的是autofac。目前推荐大家使用自带的,省事儿

                  2.2.2.1、autofac

                  1、在program.cs文件中

                  builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
                  builder.Host.ConfigureContainer(b =>
                  {
                      b.RegisterModule();
                  });
                  

                  其中AutofacModuleRegister的定义如下:

                   public class AutofacModuleRegister: Autofac.Module
                   {
                       /// 
                       /// 自动加载注册程序集
                       /// 
                       /// 
                       protected override void Load(ContainerBuilder builder)
                       {
                           var basePath = AppContext.BaseDirectory;
                           #region 带有接口层的服务注入
                           //服务注入
                           List dllServiceFiles = new List()
                           {
                                   "TsinghuaNet8WebAPI.Dl.dll",
                                   "TsinghuaNet8WebAPI.dll",
                                   "TsinghuaNet8WebAPI.Bl.dll"
                           };
                           var cacheType = new List();
                           List servicesAssembly = new List();
                           foreach (var item in dllServiceFiles)
                           {
                               var dllFile = Path.Combine(basePath, item);
                               if (!File.Exists(dllFile))
                               {
                                   throw new Exception($"{item}丢失,请重新编译后请检查 bin 文件夹,并拷贝。");
                               }
                               servicesAssembly.Add(Assembly.LoadFrom(dllFile));
                           }
                           //构造器注入
                           builder.RegisterAssemblyTypes(servicesAssembly.ToArray()).
                               Where(t => !t.IsAbstract) //还可以添加自定义的检索条件
                               .InstancePerDependency(); //默认的类型
                           #endregion
                       }
                   }
                  
                  2.2.2.2、使用自带的容器

                  直接在program.cs中填写。简单省事。

                  #region 注入接口服务
                  builder.Services.AddScoped();
                  #endregion
                  

                  2.2.3、日志记录篇

                  常用的NET日志工具,一般有:log4NET、NLog这两个。基本上都差不多,这有个连接:NET常用的10个日志记录工具

                  本次以Nlog为例

                  2.2.3.2 nlog

                  在program.测试中添加以下代码。

                  //第3步,配置日志信息,使用NLog
                  builder.Logging.ClearProviders();//清除所有的日志ILoggerProvider 记录提供器
                  builder.Logging.SetMinimumLevel(LogLevel.Information);
                  builder.Logging.AddNLog("Configs/NlogConfig.config");
                  builder.Host.UseNLog();//设置NLog 依赖注入 .net core 版本需要引用NLog.Web.AspNetCore
                  builder.Logging.AddConsole();
                  

                  添加配置文件,如图所示。

                  配置文件如下:

                  
                  
                  	
                  	
                  		
                  		
                  		
                  		
                  		
                  	
                  	
                  		
                  		
                  		
                  		
                  		
                  		
                  	
                  
                  

                  2.2.4 其他

                  2.2.4.1 设置

                  swagger的设置

                  //Swagger服务
                  builder.Services.AddSwaggerGen(c =>
                  {
                  	c.SwaggerDoc("v1", new OpenApiInfo
                  	{
                  		Title = "接口说明",
                  		Version = "v1",
                  		Contact = new OpenApiContact { Name = "WebApi", Email = "xxx", Url = new Uri("http://info.btch.edu.cn") },
                  		License = new OpenApiLicense { Name = "XXX公司", Url = new Uri("http://info.btch.edu.cn") }
                  	});
                  	c.OrderActionsBy(o => o.RelativePath);
                  	string path = AppContext.BaseDirectory;
                  	var xmlPath = Path.Combine(path, "ClinicWebApplication.xml");
                  	c.IncludeXmlComments(xmlPath, true);
                  });
                  

                  基本的配置就是这样子

转载请注明来自码农世界,本文标题:《使用.NET8实现Web API》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,67人围观)参与讨论

还没有评论,来说两句吧...

Top