使用.NET8實現(xiàn)Web API的項目實踐
1、環(huán)境準備
1.1、從官網(wǎng)下載及安裝VS2022社區(qū)版
可從官網(wǎng)下載VS2022社區(qū)版本,并進行安裝。下載鏈接:官網(wǎng)VS2022社區(qū)版本鏈接
【說明】去年(2023年)底,微軟發(fā)布了NET8,為長期支持版本。目前長期支持的版本為:NET6和NET8。所以建議直接使用NET8。在VS2022安裝時,默認的NET版本就是NET8。
1.2、下載及安裝asp.net core的運行時及IIS Module
安裝完成VS2022后,需要額外安裝Core運行時及IIS的模塊。
1、下載及安裝運行時以及IIS的模塊
直接在網(wǎng)上輸入: windows hosting bundle或托管捆綁包。找到官網(wǎng)就能下載,下載完成后進行安裝。
【說明】先在本機完成安裝IIS,否則還得折騰。

2、完成安裝

安裝完成后,在IIS的模塊中應該能夠看到AspNetCoreModuleV2

3、IIS設置
因為要支持跨平臺性,微軟推出“Kestrel”服務,替代IIS承載asp.net core等Web服務。因此IIS的web承載功能就沒用了,IIS只是一個請求轉(zhuǎn)發(fā)的功能,類似Nginx。所以,需要設置IIS的程序池進行相關設置。
創(chuàng)建一個新的程序應用池,CLR版本選擇“無托管代碼”,如下圖所示。使用asp.net core發(fā)布的網(wǎng)站,選擇應用程序池時,選擇剛才創(chuàng)建的這個。

在發(fā)布asp.net core的web程序時,選擇剛才設置的程序池

以上工作完成后,就進入Web API的正式創(chuàng)建了
2、WebAPI工程創(chuàng)建
新建項目–>選擇ASP.NET Core Web API


選擇相應的信息后,點擊創(chuàng)建既可

一些默認的配置需要優(yōu)化下。以便更快的上手。

2.1 創(chuàng)建API服務
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步:設置第三方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就是實例的創(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 帶有接口層的服務注入
//服務注入
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(); //默認的類型
#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 監(jiān)視配置文件,并在配置文件發(fā)生更改時自動重新載入配置文件而不需要重啟應用程序 -->
<targets>
<!-- archiveAboveSize 代表日志文本文件的最大字節(jié)數(shù),單位字節(jié) -->
<!-- maxArchiveFiles 代表存儲的日志文件最大個數(shù),設置后可以避免日志文件無限量增加,導致磁盤空間不夠 -->
<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實現(xiàn)Web API的項目實踐的文章就介紹到這了,更多相關.NET8實現(xiàn)Web API內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
asp.net中簡體轉(zhuǎn)繁體實現(xiàn)代碼
最近到了臺企,什么都要用繁體的。開發(fā)中也遇到了簡繁體轉(zhuǎn)換的問題。這里和朋友們分享一下用.net實現(xiàn)簡繁體轉(zhuǎn)換的經(jīng)驗。2010-03-03
深入解讀CancellationToken: .NET異步操作的控制操作方法
CancellationToken是.NET中用于異步操作取消的機制,通過CancellationTokenSource控制取消信號,實現(xiàn)異步任務的優(yōu)雅終止,本文重點介紹CancellationToken: .NET異步操作的控制操作方法,感興趣的朋友跟隨小編一起看看吧2025-12-12
使用本機IIS?Express開發(fā)Asp.Net?Core應用圖文教程
IIS Express是一個Mini版的IIS,能夠支持所有的Web開發(fā)任務,本篇經(jīng)驗將和大家介紹使用自定義主機名來訪問運行在IIS?Express上的站點程序的方法,希望對大家的工作和學習有所幫助2023-06-06
Asp.net中安全退出時清空Session或Cookie的實例代碼
網(wǎng)站中點擊退出,如果僅僅是重定向到登錄/出頁面,此時在瀏覽器地址欄中輸入登錄后的某個頁面地址如主頁,你會發(fā)現(xiàn)不用登錄就能訪問,這種退出并不安全了,下面通過本文給大家介紹安全退出時清空Session或Cookie的實例代碼2016-11-11
asp.net GridView控件鼠標移動某行改變背景顏色(方法一)
asp.net GridView控件鼠標移動某行改變背景顏色2009-12-12
.net core EF Core調(diào)用存儲過程的方式
這篇文章主要給大家介紹了關于.net core EF Core調(diào)用存儲過程的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用.net core EF Core具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-05-05
GridView分頁的實現(xiàn)以及自定義分頁樣式功能實例
本文為大家詳細介紹下GridView實現(xiàn)分頁并自定義的分頁樣式,具體示例代碼如下,有想學習的朋友可以參考下哈,希望對大家有所幫助2013-07-07
ASP.NET小結(jié)之MVC, MVP, MVVM比較以及區(qū)別(一)
MVC, MVP和MVVM都是用來解決界面呈現(xiàn)和邏輯代碼分離而出現(xiàn)的模式。以前只是對它們有部分的了解,沒有深入的研究過,對于一些里面的概念和區(qū)別也是一知半解?,F(xiàn)在一邊查資料,并結(jié)合自己的理解,來談一下對于這三種模式思想的理解,以及它們的區(qū)別。歡迎各位高手拍磚。2014-05-05

