使用.NET8實現(xiàn)Web API的項目實踐
1、環(huán)境準(zhǔn)備
1.1、從官網(wǎng)下載及安裝VS2022社區(qū)版
可從官網(wǎng)下載VS2022
社區(qū)版本,并進行安裝。下載鏈接:官網(wǎng)VS2022社區(qū)版本鏈接
【說明】去年(2023年)底,微軟發(fā)布了NET8
,為長期支持版本。目前長期支持的版本為:NET6
和NET8
。所以建議直接使用NET8。在VS2022安裝時,默認(rèn)的NET版本就是NET8
。
1.2、下載及安裝asp.net core的運行時及IIS Module
安裝完成VS2022后,需要額外安裝Core運行時及IIS的模塊
。
1、下載及安裝運行時以及IIS的模塊
直接在網(wǎng)上輸入: windows hosting bundle
或托管捆綁包
。找到官網(wǎng)就能下載,下載完成后進行安裝。
【說明】先在本機完成安裝IIS,否則還得折騰。
2、完成安裝
安裝完成后,在IIS
的模塊
中應(yīng)該能夠看到AspNetCoreModuleV2
3、IIS設(shè)置
因為要支持跨平臺性,微軟推出“Kestrel
”服務(wù),替代IIS承載asp.net core
等Web服務(wù)。因此IIS
的web承載功能就沒用了,IIS
只是一個請求轉(zhuǎn)發(fā)的功能,類似Nginx
。所以,需要設(shè)置IIS
的程序池進行相關(guān)設(shè)置。
創(chuàng)建一個新的程序應(yīng)用池,CLR版本選擇“無托管代碼
”,如下圖所示。使用asp.net core發(fā)布的網(wǎng)站,選擇應(yīng)用程序池時,選擇剛才創(chuàng)建的這個。
在發(fā)布asp.net core
的web程序時,選擇剛才設(shè)置的程序池
以上工作完成后,就進入Web API
的正式創(chuàng)建了
2、WebAPI工程創(chuàng)建
新建項目–>選擇ASP.NET Core Web API
選擇相應(yīng)的信息后,點擊創(chuàng)建既可
一些默認(rèn)的配置需要優(yōu)化下。以便更快的上手。
2.1 創(chuàng)建API服務(wù)
1、Controllers–>添加–>控制器
選擇API控制器
2.2 推薦的庫
2.2.1 數(shù)據(jù)庫篇
2.2.1.1、 SQLSugar
一般NET會使用三個ORM的框架:EF、SQLSugar、Drapper。這三個基本大差不差,推薦使用SQLSugar。
這里重點講一下SQLsugar,
在program.cs文件中,直接寫入如下代碼,然后在需要用到的地方進行
//第2步:設(shè)置第三方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配置文件中的字符串設(shè)置 IsAutoCloseConnection = true, }, db => { db.Aop.OnLogExecuting = (sql, pars) => { //可以進行日志記錄之類的工作 }; }); return sqlSugar; });
2.2.1.2、 OracleAccess
若不使用ORM等第三方的庫,則使用Oracle的庫“ManagedDataAccess”。這個的好處是不用關(guān)心32還64位的問題。
2.2.2、IOC篇
IOC就是實例的創(chuàng)建,交給了容器。由容器創(chuàng)建實例,一般而言。項目中本身也包含此功能: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 帶有接口層的服務(wù)注入 //服務(wù)注入 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)); } //構(gòu)造器注入 builder.RegisterAssemblyTypes(servicesAssembly.ToArray()). Where(t => !t.IsAbstract) //還可以添加自定義的檢索條件 .InstancePerDependency(); //默認(rèn)的類型 #endregion } }
2.2.2.2、使用自帶的容器
直接在program.cs中填寫。簡單省事。
#region 注入接口服務(wù) 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();//設(shè)置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 監(jiān)視配置文件,并在配置文件發(fā)生更改時自動重新載入配置文件而不需要重啟應(yīng)用程序 --> <targets> <!-- archiveAboveSize 代表日志文本文件的最大字節(jié)數(shù),單位字節(jié) --> <!-- maxArchiveFiles 代表存儲的日志文件最大個數(shù),設(shè)置后可以避免日志文件無限量增加,導(dǎo)致磁盤空間不夠 --> <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 設(shè)置
swagger的設(shè)置
//Swagger服務(wù) 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); });
基本的配置就是這樣子
到此這篇關(guān)于使用.NET8實現(xiàn)Web API的項目實踐的文章就介紹到這了,更多相關(guān).NET8實現(xiàn)Web API內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ASP.NET WebForm中<%=%>與<%#%>的區(qū)別
這篇文章主要介紹了ASP.NET WebForm中<%=%>與<%#%>的區(qū)別,需要的朋友可以參考下2015-01-01微信公眾平臺開發(fā)之認(rèn)證"成為開發(fā)者".Net代碼解析
這篇文章主要為大家詳細(xì)解析了微信公眾平臺開發(fā)之認(rèn)證"成為開發(fā)者".Net代碼,感興趣的小伙伴們可以參考一下2016-06-06