国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

2.1 .net 8 ASP.NET Core Web API - Controller詳解

這篇具有很好參考價(jià)值的文章主要介紹了2.1 .net 8 ASP.NET Core Web API - Controller詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、概述

書接上回,上節(jié)我們留了幾個問題,即:

1、接口Hello的名字究竟怎么來的?

2、我們?nèi)绻氚呀涌诟某善渌拿Q,應(yīng)該怎么做?

3、我們繼承ControllerBase,以及[Route(“[controller]”)]屬性,又是分別起到什么作用?

需要解決以上幾個問題,我們就要繼續(xù)深入研究Controller相關(guān)的一些東西,主要包括ControllerBase基類、ApiController 屬性,我們想要精通某個技術(shù),必須要了解器原理,才能做到觸類旁通、靈活運(yùn)用。

.net8 webapi 權(quán)限控制,.net 8 web api 教程,從0開始,前端,.net,asp.net

ControllerBase 是Web API 控制器的基類,換句話說,Web API 控制器通常都應(yīng)繼承 ControllerBase。做過MVC項(xiàng)目的朋友可能都知道,在MVC里面控制器一般繼承Controller。兩者有什么關(guān)系和區(qū)別嗎?

二、ControllerBase

1、ControllerBase基類和Controller基類的關(guān)系

查看ControllerBase 的定義,這是一個抽象類;
.net8 webapi 權(quán)限控制,.net 8 web api 教程,從0開始,前端,.net,asp.net

再看Controller的定義,其繼承了ControllerBase

.net8 webapi 權(quán)限控制,.net 8 web api 教程,從0開始,前端,.net,asp.net
兩者的關(guān)系是:Controller基類派生自ControllerBase

2、ControllerBase基類和Controller基類的區(qū)別

Controller 派生自 ControllerBase,主要區(qū)別是Controller 功能更強(qiáng)大,主要添加對視圖的支持,因此它用于處理 Web 頁面,而不是 Web API 請求。 如果同一控制器需要同時支持視圖和 Web API,那應(yīng)該派生自 Controller。如果僅僅需要支持 Web API,那就派生自 ControllerBase即可,這樣更加輕量級。

3、ControllerBase作用

ControllerBase 類主要作用是提供了很多用于處理 HTTP 請求的屬性和方法。比如我們可以通過這個基類提供的Request屬性獲取請求頭信息:

// 獲取請求頭
 var headers = this.Request.Headers;
 foreach (var kvp in headers)
 {
     Console.WriteLine($"{kvp.Key} : {kvp.Value}");
 }

運(yùn)行結(jié)果可以看到我們把請求頭的全部信息都獲取到了
.net8 webapi 權(quán)限控制,.net 8 web api 教程,從0開始,前端,.net,asp.net

有關(guān)ControllerBase 可用方法和屬性的列表,具體不展開,可參考官方文檔。

三、[ApiController]屬性

作用:[ApiController] 屬性應(yīng)用于控制器類,讓控制器上或該控制器下的的API具有以下幾個固定的功能

(1)、屬性路由要求
(2)、自動 HTTP 400 響應(yīng)
(3)、綁定源參數(shù)推理
(4)、Multipart/form-data 請求推理
(5)、錯誤狀態(tài)代碼的問題詳細(xì)信息
下面分別闡述

1、屬性路由要求

先介紹 ASP.NET Core 中的路由的兩種方式 傳統(tǒng)路由屬性路由

傳統(tǒng)路由實(shí)現(xiàn)方式:

// 在Program.cs中或Startup.cs中使用
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

或者

// 在Program.cs中或Startup.cs中使用
app.MapDefaultControllerRoute();

屬性路由的實(shí)現(xiàn)方式:

// 在Program.cs中或Startup.cs中使用
app.MapControllers();

然后在Controller中使用[Route(“”)]屬性指定路由名稱,如示例代碼:

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase

介紹完了兩種路由,再來看什是屬性路由要求?

所謂屬性路由要求,意思就是如果Controller加了[ApiController]屬性,就必須走屬性路由的方式。這也就能解釋示例代碼Controller上存在[ApiController][Route(“[controller]”)]這兩個屬性。

2、自動 HTTP 400 響應(yīng)

什么是http 400?比如我們對用戶注冊的手機(jī)號碼格式有校驗(yàn)要求,手機(jī)號碼格式不正確時候,這個時候參數(shù)校驗(yàn)就會不通過,需要寫如下代碼。

if (!ModelState.IsValid)
{
    return BadRequest(ModelState);
}

[ApiController] 屬性使模型驗(yàn)證錯誤自動觸發(fā) HTTP 400 響應(yīng)。 因此,操作方法中不需要上述代碼。

3、綁定源參數(shù)推理

我們獲取參數(shù)的時候,有以下一些綁定源:

[FromBody] 請求正文
[FromForm] 請求正文中的表單數(shù)據(jù)
[FromHeader] 請求標(biāo)頭
[FromQuery] 請求查詢字符串參數(shù)
[FromRoute] 當(dāng)前請求中的路由數(shù)據(jù)
[FromServices] 作為操作參數(shù)插入的請求服務(wù)
[AsParameters] 方法參數(shù)

[ApiController] 屬性借助推理規(guī)則,無需手動識別綁定源。先大概描述下,后續(xù)在參數(shù)傳遞和綁定章節(jié)再詳細(xì)展開這些規(guī)則。

4、Multipart/form-data 請求推理

[ApiController] 屬性針對 IFormFile 和 IFormFileCollection 類型的操作。 為這些類型自動推斷內(nèi)容類型為: multipart/form-data。不需要人工在請求Header頭上指定類型。

5、錯誤狀態(tài)代碼的問題詳細(xì)信息

錯誤結(jié)果(狀態(tài)代碼>= 400)以ProblemDetails展示。
ProblemDetails的定義如下:
.net8 webapi 權(quán)限控制,.net 8 web api 教程,從0開始,前端,.net,asp.net
看怎么使用:
比如有如下的代碼,拋出一個404 NotFound的異常

if (pagePath == null)
{
    return NotFound();
}

NotFound 方法會生成帶 ProblemDetails 正文的 HTTP 404 狀態(tài)代碼。 例如:

{
  type: "https://tools.ietf.org/html/rfc7231#section-6.5.4",
  title: "Not Found",
  status: 404,
  traceId: "0HLHLH32KRN20:00000001"
}

小結(jié)

以上5點(diǎn)就是[ApiController]屬性起到的作用,接下來我們來介紹[RouteAttribute]屬性的作用。

四、[RouteAttribute]屬性

其實(shí)上面屬性路由環(huán)節(jié)基本已經(jīng)介紹了這個屬性,這個屬性的作用就是:指定控制器上的屬性路由

包含三個屬性:

Name :路由名稱。

Order :路由執(zhí)行的順序。

Template :路由模板。 可為 null。

其中,最關(guān)鍵的Template ,一般通過Template指定接口的訪問路徑,比如:

[Route(“/route/norest/{name?}/”)]

五、解決上節(jié)遺留問題

有了這些基礎(chǔ)知識,我們來解決上節(jié)遺留的問題:

1、接口Hello的名字究竟怎么來的?

答:接口Hello的名字是根據(jù)下面代碼有關(guān)

[Route("[controller]")]
 public class HelloController : ControllerBase

因?yàn)镃ontroller的名稱為Hello,根據(jù)restful API規(guī)范,Controller里面又只有一個Get請求的接口,故Action的定義沒有影響到接口的最終名稱。

2、我們?nèi)绻氚呀涌诟某善渌拿Q,應(yīng)該怎么做?
答:修改成如下代碼即可,比如改成Greeting

 [ApiController]
 [Route("")]
 public class HelloController : ControllerBase
 {
    [HttpGet("Greeting",Name = "GetHello")]
     
     public string Hello()
     {   
         return "Hello,World!";
     }
 }

有兩處改動,去除Controller的Route名稱,改為空字符串,然后給Hello方法指定Template(注:HttpGet可以直接指定Template )。

運(yùn)行結(jié)果如下:
.net8 webapi 權(quán)限控制,.net 8 web api 教程,從0開始,前端,.net,asp.net
可以看到,名稱已經(jīng)修改成功。

3、我們繼承ControllerBase,以及[Route(“[controller]”)]屬性,又是分別起到什么作用?

答:這個上面都有詳細(xì)描述了

六 、總結(jié)

本節(jié)的目標(biāo)主要講述controller相關(guān)的一些知識,再解決第1個問題的過程中,出現(xiàn)了一個restful API規(guī)范的概念,以及在路由環(huán)節(jié)的介紹基本也是帶過,下節(jié)我們將深入路由環(huán)節(jié),揭開它的神秘面紗。

敬請期待…文章來源地址http://www.zghlxwxcb.cn/news/detail-828395.html

到了這里,關(guān)于2.1 .net 8 ASP.NET Core Web API - Controller詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ASP.NET Core Web API之Token驗(yàn)證

    ASP.NET Core Web API之Token驗(yàn)證

    在實(shí)際開發(fā)中,我們經(jīng)常需要對外提供接口以便客戶獲取數(shù)據(jù),由于數(shù)據(jù)屬于私密信息,并不能隨意供其他人訪問,所以就需要驗(yàn)證客戶身份。那么如何才能驗(yàn)證客戶的什么呢?今天以一個簡單的小例子,簡述ASP.NET Core Web API開發(fā)過程中,常用的一種JWT身份驗(yàn)證方式。僅供學(xué)

    2024年02月11日
    瀏覽(22)
  • ASP.NET Core Web API入門之三:使用EF Core

    ASP.NET Core Web API入門之三:使用EF Core

    一般來講我們做項(xiàng)目都會用實(shí)體類跟數(shù)據(jù)庫實(shí)體進(jìn)行關(guān)系對應(yīng),這樣的好處方便我們維護(hù)、增刪改查,并且可以減少SQL的編寫,從而統(tǒng)一風(fēng)格,那么 Entity Framework Core 就是很不錯的ORM框架。 1、跨數(shù)據(jù)庫支持能力強(qiáng)大,只需修改配置就可以輕松實(shí)現(xiàn)數(shù)據(jù)庫切換。 2、提升了開發(fā)效

    2024年02月10日
    瀏覽(22)
  • 在 ASP.NET Core Web API 中處理 Patch 請求

    PUT 和 PATCH 方法用于更新現(xiàn)有資源。 它們之間的區(qū)別是,PUT 會替換整個資源,而 PATCH 僅指定更改。 在 ASP.NET Core Web API 中,由于 C# 是一種靜態(tài)語言( dynamic 在此不表),當(dāng)我們定義了一個類型用于接收 HTTP Patch 請求參數(shù)的時候,在 Action 中無法直接從實(shí)例中得知客戶端提供了哪

    2024年02月04日
    瀏覽(97)
  • 如何將.NET 8.0的ASP.NET Core Web API部署成Windows服務(wù)

    如何將.NET 8.0的ASP.NET Core Web API部署成Windows服務(wù)

    前面寫了一篇關(guān)于將.NET應(yīng)用轉(zhuǎn)換成Windows服務(wù)的方法,其實(shí)真正的目的是為了探索如何將Asp.Net Core Web Api 部署成Windows 服務(wù)?;谏弦黄幕A(chǔ),只需把創(chuàng)建 WebApplication 的代碼放到?BackgroundService 的ExecuteAsync方法中即可。 其中比較重要的一個細(xì)節(jié)就是需要指定一下配置: ? ?

    2024年01月17日
    瀏覽(93)
  • 1.2 .net 8 ASP.NET Core Web API 項(xiàng)目創(chuàng)建之 Hello,World

    1.2 .net 8 ASP.NET Core Web API 項(xiàng)目創(chuàng)建之 Hello,World

    上一節(jié)演示了如何創(chuàng)建一個新的Web API 項(xiàng)目,并展示了如何運(yùn)行及測試接口,這節(jié)的主要目標(biāo)是增加一個hello的接口,接口返回內(nèi)容為“Hello,World!”,在添加接口之前,我們先要對上一節(jié)的項(xiàng)目進(jìn)行分析,只有了解項(xiàng)目的結(jié)構(gòu),才能知道怎么去添加新的接口和擴(kuò)展新的功能。

    2024年01月20日
    瀏覽(34)
  • ASP.NET Core SingleR Core:WebApi + .net 客戶端開發(fā)

    ASP.NET Core SingleR Core:WebApi + .net 客戶端開發(fā)

    我之前稍微研究了一下SignalR Core。用起來還行。簡單來說SignalR就是用來解決實(shí)時通訊的問題的。 ASP.NET Core SingleR:初次體驗(yàn)和簡單項(xiàng)目搭建 SignalR支持三種客戶端,C#,Java,JavaScirpt。基本夠用了。本身就是微軟開發(fā)的,肯定支持自己的語言。因?yàn)槭荳ebsocket的上層封裝,所以也要支

    2024年01月20日
    瀏覽(575)
  • ASP.NET Core 的 Web Api 實(shí)現(xiàn)限流 中間件

    ASP.NET Core 的 Web Api 實(shí)現(xiàn)限流 中間件

    Microsoft.AspNetCore.RateLimiting ?中間件提供速率限制(限流)中間件。 它是.NET 7 以上版本才支持的中間件,剛看了一下,確實(shí)挺好用,下面給大家簡單介紹一下: RateLimiterOptionsExtensions?類提供下列用于限制速率的擴(kuò)展方法:????? 固定窗口限制器 滑動窗口限制器 令牌桶限

    2024年01月17日
    瀏覽(18)
  • ASP.NET Core 中基于 Minimal APIs 的Web API

    Minimal APIs 是ASP.NET Core中快速構(gòu)建 REST API 的方式,可以用最少的代碼構(gòu)建全功能的REST API。比如下面三行代碼: 可以實(shí)現(xiàn)在請求網(wǎng)站根目錄結(jié)點(diǎn)的時候,返回\\\"Hello World!\\\"。 這種方式的Web API可以用于構(gòu)建微服務(wù),極簡功能的網(wǎng)站。 下面代碼,將幾個 HTTP 請求的 url映射到 Lambda

    2024年02月10日
    瀏覽(25)
  • ASP.NET Core Web API 流式返回,實(shí)現(xiàn)ChatGPT逐字顯示

    ASP.NET Core Web API 流式返回,實(shí)現(xiàn)ChatGPT逐字顯示

    ??作者:科技、互聯(lián)網(wǎng)行業(yè)優(yōu)質(zhì)創(chuàng)作者 ??專注領(lǐng)域:.Net技術(shù)、軟件架構(gòu)、人工智能、數(shù)字化轉(zhuǎn)型、DeveloperSharp、微服務(wù)、工業(yè)互聯(lián)網(wǎng)、智能制造 ??歡迎關(guān)注我(Net數(shù)字智慧化基地),里面有很多 高價(jià)值 技術(shù)文章, 是你刻苦努力也積累不到的經(jīng)驗(yàn) ,能助你快速成長。升職

    2024年02月22日
    瀏覽(26)
  • .net 溫故知新【14】:Asp.Net Core WebAPI  緩存

    .net 溫故知新【14】:Asp.Net Core WebAPI 緩存

    緩存指在中間層中存儲數(shù)據(jù)的行為,該行為可使后續(xù)數(shù)據(jù)檢索更快。 從概念上講,緩存是一種性能優(yōu)化策略和設(shè)計(jì)考慮因素。 緩存可以顯著提高應(yīng)用性能,方法是提高不常更改(或檢索成本高)的數(shù)據(jù)的就緒性。 在最新的緩存控制規(guī)范文件RFC9111中,詳細(xì)描述了瀏覽器緩存和

    2024年02月05日
    瀏覽(91)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包