目录
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<ISqlSugarClient>(s =>{//Scoped用SqlSugarClient SqlSugarClient sqlSugar =newSqlSugarClient(newConnectionConfig(){
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(newAutofacServiceProviderFactory());
builder.Host.ConfigureContainer<ContainerBuilder>(b =>{
b.RegisterModule<AutofacModuleRegister>();});
其中AutofacModuleRegister的定义如下:
publicclassAutofacModuleRegister:Autofac.Module{/// <summary>/// 自动加载注册程序集/// </summary>/// <param name="builder"></param>protectedoverridevoidLoad(ContainerBuilder builder){var basePath = AppContext.BaseDirectory;#region 带有接口层的服务注入//服务注入List<string> dllServiceFiles =newList<string>(){"TsinghuaNet8WebAPI.Dl.dll","TsinghuaNet8WebAPI.dll","TsinghuaNet8WebAPI.Bl.dll"};var cacheType =newList<Type>();List<Assembly> servicesAssembly =newList<Assembly>();foreach(var item in dllServiceFiles){var dllFile = Path.Combine(basePath, item);if(!File.Exists(dllFile)){thrownewException($"{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这两个。基本上都差不多,这有个连接: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();
添加配置文件,如图所示。
配置文件如下:
<?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",newOpenApiInfo{
Title ="接口说明",
Version ="v1",
Contact =newOpenApiContact{ Name ="WebApi", Email ="xxx", Url =newUri("http://info.btch.edu.cn")},
License =newOpenApiLicense{ Name ="XXX公司", Url =newUri("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);});
基本的配置就是这样子
版权归原作者 zlbcdn 所有, 如有侵权,请联系我们删除。