成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

DotNET 7:最小 API 使用,你知道嗎?

開發(fā) 架構(gòu)
對于一些簡單的接口場景,使用最小 API 比較方便,都在一個文件中處理;除了依賴注入式通過方法參數(shù),其他很多地方跟之前用法類似,就是將 Startup 中 ConfigureServices 方法和 Configure 方法搬到了 Program 類的固定位置。

最小 API 并不是在 .NET 7 中才加入的,記得應(yīng)該是在 .NET 6 中就已經(jīng)提供,只是對我來說,到現(xiàn)在才開始使用。

創(chuàng)建一個最小 API

在 VS 2022 中創(chuàng)建 WebAPI 項目,不勾選使用控制器,創(chuàng)建出來的就是最小 API :

圖片

  • 不勾選使用控制器,就會創(chuàng)建最小 API 模板。
  • 啟用 OpenAPI ,默認(rèn)會添加 Swagger。
  • 頂級語句:頂級語句是 C# 9.0 中添加的新特性,如果勾選不使用,Program 類中還會出現(xiàn) main 函數(shù)。

創(chuàng)建出來的工程只有兩個文件,重大的改變就是,沒有之前的 Startup 類了,只有一個 Program 和一個配置文件 appsetting.json:

圖片

Program 類的全部代碼如下:

var builder = WebApplication.CreateBuilder(args);
//在下面添加服務(wù)器到容器,相當(dāng)于之前 Startup 類中的 ConfigureServices 方法
var app = builder.Build();
//在下面編寫管道相關(guān)代碼,相當(dāng)于之前 Startup 類中的 Configure 方法
//在下面編寫接口,相當(dāng)于之前 Controller 中的方法
var summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
app.MapGet("/weatherforecast", () =>
{
var forecast = Enumerable.Range(1, 5).Select(index =>
new WeatherForecast
(
DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
Random.Shared.Next(-20, 55),
summaries[Random.Shared.Next(summaries.Length)]
))
.ToArray();
return forecast;
});

//運行 API
app.Run();

internal record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)
{
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}

app.MapGet 方法接受兩個參數(shù),第一個參數(shù)是一個字符串,為接口的訪問路徑,第二個參數(shù)是一個委托,用來編寫接口的業(yè)務(wù)邏輯。

從 MapGet 這個方法名可以看出,這是一個 Get 請求的接口方法,如果要使用 Post ,可以使用 MapPost 。

添加一個接口方法非常簡單,如下圖:

圖片

使用 Serilog 日志框架

1、安裝 NuGet 包:Serilog.AspNetCore,安裝這一個就會包含 Serilog 、Serilog.Sink.File 等。

2、在 Program 類的 builder 創(chuàng)建之后,添加對 Serilog 的使用:

using Serilog;
var builder = WebApplication.CreateBuilder(args);
//在下面添加服務(wù)器到容器,相當(dāng)于之前 Startup 類中的 ConfigureServices 方法
//添加對 serilog 的使用
builder.Host.UseSerilog((hostContext, services, configuration) => {
configuration
.WriteTo.File("serilog-file.txt")
.WriteTo.Console();
});
var app = builder.Build();
// 下面代碼省略

3、運行程序,會看到項目更目錄下會生成一個 serilog-file.txt 文本文件,里面記錄了所有日志。

4、在上面添加的 helloworld 方法中使用日志:

app.MapGet("/helloworld", () => 
{
Log.Information("helloworld.start");
return "hello ,oec2003";
});
  • Information 是日志級別,還有 Error、Warning、Fatal、Debug。
  • 接口方法調(diào)用后,日志會寫入文本文件。

依賴注入

依賴注入一個常見的做法是使用構(gòu)造函數(shù)進(jìn)行注入,傳統(tǒng)的 WebAPI 中可以在 Controller 的構(gòu)造函數(shù)中進(jìn)行,但最小 API 沒有 Controller ,下面看看在最小 API 中是怎么注入的。

1、在 Program 類的最下面添加 IUser 接口和 User 類:

internal interface IUser
{
string GetName();
}
internal class User : IUser
{
public string GetName()
{
return "oec2003";
}
}

2、在 Program 類的 builder 創(chuàng)建之后,添加依賴注入的配置:

builder.Services.AddTransient<IUser, User>();

3、注入的地方由原來的構(gòu)造函數(shù)變成了方法參數(shù):

app.MapGet("/helloworld",  (IUser user) => 
{
return $"hello , {user.GetName()}";
});

配置

最小 API 的項目中的兩個文件,其中一個就是 appsetting.json 配置文件,下面以 Serilog 日志框架的配置為例,來演示怎樣讀取配置文件。

1、在上面的 Serilog 例子中,配置是在代碼中寫死的,現(xiàn)在將配置移到 appsetting.json 配置文件中。

"Serilog": {
"MinimumLevel": "Information",
"Override": {
"Microsoft.AspNetCore": "Warning"
},
"WriteTo": [
{
"Name": "Console"
},
{
"Name": "File",
"Args": {
"path": "Serilogs\\serilog.log"
}
}
]
}

2、修改 builder 部分的代碼:

builder.Host.UseSerilog(
(hostingContext, loggerConfiguration) => loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration));

3、運行程序后,在程序根目錄下會創(chuàng)建 Serilogs 目錄,該目錄中會創(chuàng)建 serilog.log 文件。

總結(jié)

1、對于一些簡單的接口場景,使用最小 API 比較方便,都在一個文件中處理。

2、除了依賴注入式通過方法參數(shù),其他很多地方跟之前用法類似,就是將 Startup 中 ConfigureServices 方法和 Configure 方法搬到了 Program 類的固定位置。

責(zé)任編輯:姜華 來源: 不止dotNET
相關(guān)推薦

2024-07-30 08:22:47

API前端網(wǎng)關(guān)

2024-10-24 08:47:12

2020-10-08 18:58:46

條件變量開發(fā)線程

2024-05-28 09:12:10

2024-04-07 00:00:00

ESlint命令變量

2023-08-29 09:31:01

Scrapy網(wǎng)頁爬蟲

2023-04-28 12:37:59

Spring@Bean使用方式

2023-04-23 09:50:50

@BeanSpring

2023-04-26 10:21:04

2023-12-12 08:41:01

2023-12-20 08:23:53

NIO組件非阻塞

2024-04-30 09:02:48

2023-11-06 18:33:19

分庫分表數(shù)據(jù)庫

2021-04-20 23:16:06

SparkSQL語法

2022-12-02 14:12:52

新能源汽車海爾

2024-07-08 00:00:01

多線程ThreadC#

2025-02-18 08:11:17

2022-11-04 14:16:05

2023-03-21 07:39:51

CentOS掛載硬盤

2023-01-13 17:02:10

操作系統(tǒng)鴻蒙
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 91久久网站 | 丁香一区二区 | 精品一区国产 | 国产精品久久久久久238 | 精品国产一区二区三区日日嗨 | 嫩草视频在线 | 一区二视频 | 日韩成人免费视频 | 九七午夜剧场福利写真 | 91精品国产乱码久久久久久久久 | 久久久精品国产 | 亚洲一区二区在线播放 | 亚洲人精品 | 久久久久网站 | 亚洲欧美中文日韩在线v日本 | 国产精品久久久久久久午夜片 | 91视视频在线观看入口直接观看 | 日韩视频 中文字幕 | 91p在线观看 | 欧美aaaaaaaaaa| 国产资源视频 | 在线播放中文字幕 | 欧美福利专区 | 亚洲成av人片在线观看 | 在线看片网站 | 亚洲成人一区二区三区 | 精品视频在线观看 | 韩日在线 | 国产三级| 日本字幕在线观看 | 婷婷在线视频 | 中文字幕一区二区三区四区五区 | 亚洲成人天堂 | 亚洲综合一区二区三区 | 精品久久久久久久 | 极品粉嫩国产48尤物在线播放 | 99re国产 | 久久精品一 | 欧美黄色一区 | 国产成人一区二区三区 | av国产精品 |