<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
ASP.NET Core 6引入了一個簡化的託管模型,可用於實現具有最小依賴性的輕量級API。這些最小的API極大地減少了你需要編寫的模板程式碼,以使你的ASP.NET Core 6應用程式啟動和執行。
我們在之前的文章中討論瞭如何開始使用最小API。在這篇文章中,我們將探討最小化API的更多高階方面,包括實現紀錄檔、從設定系統中讀取以及使用依賴性注入。
也在InfoWorld上。什麼是CI/CD?持續整合和持續交付解釋
要使用本文提供的程式碼範例,你的系統中應該安裝有Visual Studio 2022。如果你還沒有副本,你可以在這裡下載Visual Studio 2022。
首先,讓我們在Visual Studio 2022中建立一個ASP.NET Core專案。按照這些步驟將在Visual Studio 2022中建立一個新的ASP.NET Core Web API 6專案:
這將在Visual Studio 2022中建立一個新的ASP.NET Core 6 Web API專案。我們將在本文的後續章節中使用這個專案來處理一個最小的API。
你只需寫幾行程式碼就可以讓你的最小API工作:
var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", () => "This is an example of a minimal API"); app.Run();
下面的程式碼片斷說明了你如何設定你的最小API在一個特定的埠上執行:
var app = WebApplication.Create(args); app.MapGet("/", () => "Hello World!"); app.Run("http://localhost:5178");
當你執行應用程式並瀏覽到這個URL時,你應該看到 "Hello World!"資訊顯示在你的Web瀏覽器中。
你可以通過新增URL來使用多個埠,如下面的程式碼片斷所示:
app.Urls.Add("http://localhost:5178"); app.Urls.Add("http://localhost:5179");
在這種情況下,如果你瀏覽到這些端點中的任何一個,都會顯示同樣的 "Hello World!"資訊。
你甚至可以從環境中讀取埠,如下面給出的程式碼片斷所示:
var app = WebApplication.Create(args); var port = Environment.GetEnvironmentVariable("PORT") ?? "5155"; app.MapGet("/", () => "Hello World!"); app.Run($"http://localhost:{port}");
你也可以在你的最小API中使用紀錄檔。下面是你如何使用Serilog將資料記錄到控制檯:
var logger = new LoggerConfiguration() .WriteTo.Console() .CreateLogger();
你可以使用Serilog來建立紀錄檔,使應用程式重新啟動時也能持續。Serilog支援將紀錄檔記錄到資料庫、檔案、雲端儲存和其他目標。下面的程式碼片斷說明了你如何在最小的API中使用Serilog:
var builder = WebApplication.CreateBuilder(args); Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.File("logs.txt", rollingInterval: RollingInterval.Day) .CreateLogger();
下面的程式碼片斷說明了你如何在最小的API中使用紀錄檔記錄:
app.MapGet("/", (ILoggerFactory loggerFactory) => { var logger = loggerFactory.CreateLogger("Start"); logger.LogInformation("Starting..."); return "Logging at work!"; });
你也可以在你的最小的API中從設定系統中讀取。下面的程式碼片斷顯示瞭如何實現這一點:
var app = WebApplication.Create(args); var message = app.Configuration["TextMessage"] ?? "This is a default message."; app.MapGet("/", () => message); app.Run();
如果你想使用一個HttpClient範例來連線到一個遠端資源,你可以使用依賴性注入,如下文給出的程式碼片段所示:
app.MapGet("/", (IHttpClientFactory httpClientFactory) => "Inside HttpGet method");
記住要使用下面的程式碼將HttpClient新增到容器中:
builder.Services.AddHttpClient();
你也可以在HttpPost方法中利用依賴注入的優勢。下面的程式碼片段顯示了你如何將IHttpClientFactory的一個範例作為引數傳遞給你的HttpPost方法:
app.MapPost("/", (IHttpClientFactory httpClientFactory) => { var client = httpClientFactory.CreateClient(); return Results.Ok(); });
你也可以在你的最小API中注入一個自定義類的範例。為了說明這一點,我們來實現兩種型別:IAuthorRepository介面和AuthorRepository類。我們將使用這些型別在我們的最小API中實現依賴性注入。
建立一個名為IAuthorRepository.cs的新檔案並插入以下程式碼:
public interface IAuthorRepository { public List<Author> GetAuthors(); public Author GetAuthor(int id); }
AuthorRepository類實現了IAuthorRepository介面,如下圖所示:
public class AuthorRepository: IAuthorRepository { private readonly List<Author> _authors; public AuthorRepository() { _authors = new List<Author> { new Author { Id = 1, FirstName = "Joydip", LastName = "Kanjilal" }, new Author { Id = 2, FirstName = "Steve", LastName = "Smith" }, new Author { Id = 3, FirstName = "Julie", LastName = "Lerman" }, new Author { Id = 4, FirstName = "Simon", LastName = "Bisson" } }; } public List<Author> GetAuthors() { return _authors; } public Author GetAuthor(int id) { return _authors.Find(x=> x.Id == id); } }
下面的程式碼片段說明了你如何注入IAuthorRepository介面的範例:
app.MapGet("api/author/{id:int}", async (IAuthorRepository authorRepository, HttpContext httpContext) => { var id = int.Parse((string)httpContext.Request.RouteValues["id"]); var author = authorRepository.GetAuthor(id); if (author == null) { return Results.NotFound(); } return Results.Ok(author); });
最後,.NET 6包括一個偉大的新功能--全域性使用指令。為了利用全域性使用,建立一個名為Usings.cs的新檔案,並將你所有的使用語句移到那裡。你可以在你的ASP.NET Core 6或最小的API中使用這一功能,更多關於ASP.NET Core 6 API紀錄檔DI的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45