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 = 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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论