使用.NET8实现Web API的项目实践

 更新时间:2024年05月21日 11:55:42   作者:zlbcdn  
ASP.NET Web API是一种框架,用于轻松构建可以由多种客户端访问的 HTTP服务,本文主要介绍了使用.NET8实现Web API的项目实践,具有一定的参考价值,感兴趣的可以了解一下

1、环境准备

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

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

【说明】去年(2023年)底,微软发布了NET8,为长期支持版本。目前长期支持的版本为:NET6NET8。所以建议直接使用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<ISqlSugarClient>(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<ContainerBuilder>(b =>
{
    b.RegisterModule<AutofacModuleRegister>();
});

其中AutofacModuleRegister的定义如下:

 public class AutofacModuleRegister: Autofac.Module
 {
     /// <summary>
     /// 自动加载注册程序集
     /// </summary>
     /// <param name="builder"></param>
     protected override void Load(ContainerBuilder builder)
     {
         var basePath = AppContext.BaseDirectory;

         #region 带有接口层的服务注入
         //服务注入
         List<string> dllServiceFiles = new List<string>()
         {
                 "TsinghuaNet8WebAPI.Dl.dll",
                 "TsinghuaNet8WebAPI.dll",
                 "TsinghuaNet8WebAPI.Bl.dll"
         };

         var cacheType = new List<Type>();
         List<Assembly> servicesAssembly = new List<Assembly>();
         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<IGetEmrInfo, GetEmrInfo>();
#endregion

2.2.3、日志记录篇

常用的NET日志工具,一般有:log4NET、NLog这两个。基本上都差不多,本次以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();

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

在这里插入图片描述

配置文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogLevel="Warn"
      internalLogFile="internal-nlog.txt">
	<!-- autoReload:true 监视配置文件,并在配置文件发生更改时自动重新载入配置文件而不需要重启应用程序 -->

	<targets>
		<!-- archiveAboveSize 代表日志文本文件的最大字节数,单位字节 -->
		<!-- maxArchiveFiles 代表存储的日志文件最大个数,设置后可以避免日志文件无限量增加,导致磁盘空间不够 -->
		<target name="Infofile" xsi:type="File" 
			fileName="${currentdir}/Logs/Info-${shortdate}.txt" 
			archiveAboveSize="10000000" maxArchiveFiles="30"
			
		/>

		<target 
			name="Errorfile" 
			xsi:type="File" 
			fileName="${currentdir}/Logs/Error-${shortdate}.txt"  
			archiveAboveSize="10000000" 
			maxArchiveFiles="3"
			layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}"
		/>
		
	</targets>

	<rules>
		<!--All logs, including from Microsoft-->
		<logger name="*" minlevel="Info"  writeTo="Infofile" />
		<logger name="*" minlevel="Error" writeTo="Errorfile" />

		<!--Skip Microsoft logs and so log only own logs-->
		<logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
		
	</rules>
</nlog>

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的项目实践的文章就介绍到这了,更多相关.NET8实现Web API内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何在.Net 7中将Query绑定到数组详解

    如何在.Net 7中将Query绑定到数组详解

    这篇文章主要给大家介绍了关于如何在.Net 7中将Query绑定到数组的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-12-12
  • 浅析MVP模式中V-P交互问题及案例分享

    浅析MVP模式中V-P交互问题及案例分享

    如果从层次关系来讲,MVP属于Presentation层的设计模式。对于一个UI模块来说,它的所有功能被分割为三个部分,分别通过Model、View和Presenter来承载。Model、View和Presenter相互协作,完成对最初数据的呈现和对用户操作的响应,它们具有各自的职责划分。
    2014-05-05
  • ASP.NET WebForm中<%=%>与<%#%>的区别

    ASP.NET WebForm中<%=%>与<%#%>的区别

    这篇文章主要介绍了ASP.NET WebForm中<%=%>与<%#%>的区别,需要的朋友可以参考下
    2015-01-01
  • asp.net中几种常用的身份验证方法总结

    asp.net中几种常用的身份验证方法总结

    本篇文章小编就为大家介绍一下在asp.net中几种常用的身份验证方法。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-11-11
  • asp.net生成字母和数字混合图形验证码

    asp.net生成字母和数字混合图形验证码

    这篇文章主要为大家详细介绍了asp.net生成字母和数字混合图形验证码的实现方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • asp.net的cms 原理篇

    asp.net的cms 原理篇

    昨晚稍微写了一点,我订制的cms系统的标签,今天我把标签所代替的代码也写出来,需要的朋友可以参考下
    2012-12-12
  • asp.net web.config加密解密方法

    asp.net web.config加密解密方法

    你还能够使用aspnet_regiis.exe命令行工具来加密和解密Web.config文件配置部分,你可以在"%WINDOWSDIR%\Microsoft.Net\Framework\version"目录下找到这个工具。
    2009-11-11
  • .Net Core内存回收模式及性能测试对比分析

    .Net Core内存回收模式及性能测试对比分析

    下面小编就为大家分享一篇.Net Core内存回收模式及性能测试对比分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • 微信公众平台开发之认证

    微信公众平台开发之认证"成为开发者".Net代码解析

    这篇文章主要为大家详细解析了微信公众平台开发之认证"成为开发者".Net代码,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • .NET 中的 常量字段const应用介绍

    .NET 中的 常量字段const应用介绍

    C#中,当使用常数符号const时,编译器首先从定义常数的模块的元数据中找出该符号,并直接取出常数的值,接下来详细介绍,感兴趣的朋友可以参考下
    2013-01-01

最新评论