在Asp.Net Core 上面由於現在前後端分離已經是趨勢,所以asp.net core MVC用的沒有那麼多,主要以WebApi作為學習目標。
我使用的是VS2022, .Net 7版本。
在建立介面有幾項設定:
其中設定Https 是WebApi是否使用https協定,啟用docker是設定服務是否docker部署支援。我們這邊作為學習就先不管docker了。
然後下面還有三個設定,第一個是說是否使用控制器,如果使用介面服務放在Controllers資料夾下統一管理並且相關路由規則不一樣。
第二個啟用OpenAPI支援,如果啟用OpenAPI說的是swagger支援,也就是說.net 自動整合了swagger。
第三個不使用頂級語句,如果勾選後則程式的Program類和Main方法完整。
那麼我們看下上面設定是什麼意思,第二個swagger支援我們就不管了預設開啟。我建兩個專案AspNetCoreWebAPI_1、AspNetCoreWebAPI_2,AspNetCoreWebAPI_1我們勾選上【使用控制器】、【不使用頂級語句】。AspNetCoreWebAPI_2專案這兩項都不選。
先看下專案目錄結構
不同在於AspNetCoreWebAPI_1專案多了Controllers資料夾和一個WeatherForecast類,WeatherForecast類是範例介面中有使用。
我們再對比一下 Program
類
可以看到在AspNetCoreWebAPI_1專案中Program類和Main方法完整,因為要使用Controller的原因,所以依賴注入了Controller服務。並且使用了MapControllers註冊路由。
在AspNetCoreWebAPI_2專案中沒有隻有Main方法內的程式碼,這就是頂級語句。然後由於我們還使用了最小API,就是不使用Controller方式註冊和設定路由,直接在程式碼中自己註冊介面和實現介面處理的代理方法。
按照以前asp.net習慣和專案清晰度維護性我們一般是使用Controller的方式,並且不使用頂級語句。
而最小 API,是建立具有最小依賴項的 HTTP API。 它非常適合於需要在 ASP.NET Core 中僅包括最少檔案、功能和依賴項的微服務和應用。
另外還有一個appsetting.json組態檔,這部分內容也在前面已經介紹過,歡迎瞭解:.net 溫故知新:【8】.NET 中的設定從xml轉向json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
我們偵錯專案AspNetCoreWebAPI_1,此時會啟動一個服務在後端,同時啟動瀏覽器存取該站點的swagger,該swagger用於調我們偵錯webapi介面。
我們點選範例介面WeatherForecast,存取介面會返回json格式資料。響應的headers裡面可以看到後端執行的伺服器是Kestrel,和我們以前.net framework不一樣的事需要藉助IIS作為伺服器。現在的Kestrel是包含在程式中的,這個Kestrel 以後再討論。
WeatherForecastController是在建立專案後預設生成的一個範例Controller。在該Controller中我們可以看到幾個重點項。
using Microsoft.AspNetCore.Mvc;
namespace AspNetCoreWebAPI_1.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
}
{
type: "https://tools.ietf.org/html/rfc7231#section-6.5.4",
title: "Not Found",
status: 404,
traceId: "0HLHLV31KRN83:00000001"
}
以上為我們入門WebApi建立的一個預設專案,並對建立選項、專案結構、服務要點進行了分析,後面將更進一步學習分享其他asp.net core webapi重要知識。
如果你喜歡文章歡迎點選推薦,你的鼓勵對我很有用!
作者:孫泉
出處:https://www.cnblogs.com/SunSpring/p/17349653.html
本文版權歸作者所有,轉載需在文章頁面明顯位置給出原文連結。