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

【c#】了解開發(fā)Web API的基本方法

這篇具有很好參考價(jià)值的文章主要介紹了【c#】了解開發(fā)Web API的基本方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一、Web API項(xiàng)目創(chuàng)建入門?

?1.1 Web API 項(xiàng)目的創(chuàng)建

?編輯

1.2 Post、Put等操作方法

二、Restful

?2.1 什么是REST?

2.2? Restful 的優(yōu)缺點(diǎn)

三、Web API簡單實(shí)例

3.1 開發(fā)Web API

?? ? ??


一、Web API項(xiàng)目創(chuàng)建入門?

????????瀏覽器和服務(wù)器之間傳遞的主要是HTML,而手機(jī)App等客戶端和服務(wù)端之間傳遞的是JSON等結(jié)構(gòu)化的數(shù)據(jù)。我們把提供結(jié)構(gòu)化數(shù)據(jù)服務(wù)的接口叫做Web API。

?1.1 Web API 項(xiàng)目的創(chuàng)建

c# web api,.net core,c#,.net,asp.net,.netcore

?創(chuàng)建成功后:c# web api,.net core,c#,.net,asp.net,.netcore

項(xiàng)目中生成的樣本代碼 WeatherForecastController.cs是一個控制類,基本結(jié)構(gòu)如下:

//這個路由控制規(guī)則設(shè)置對 /WeatherForecast路徑請求由WeatherForecastController來處理。

[ApiController] //Web API控制類添加的Attribute
//設(shè)置路由規(guī)則
[Route("[controller]")] // [controller]代表控制器名字,也就是WeatherForecast
public class WeatherForecastController : ControllerBase
{
    [HttpGet] //作為操作方法的入口,因此下面方法名是什么都不影響程序
    public IEnumerable<WeatherForecast> Get() //處理 /WeatherForecast的請求
    {
        //代碼塊
    }
}

?????????總結(jié):控制器類上添加的[Route("[controller]")]以及Get方法上添加的[HttpGet]決定了當(dāng)客戶端向? ?/WeatherForecast這個路徑發(fā)送GET請求的時(shí)候,又Get方法進(jìn)行處理。Get方法返回的對象會被自動進(jìn)行的JSON序列返回給客戶端。

項(xiàng)目啟動后顯示界面:c# web api,.net core,c#,.net,asp.net,.netcore

? ? ? ? ?這個界面是我們創(chuàng)建項(xiàng)目的時(shí)候勾選的【啟用OpenAPI支持】所啟用的Swagger頁面,這個界面會根據(jù)項(xiàng)目中的接口定義生成一個接口定義瀏覽的界面。

1.2 Post、Put等操作方法

? ? ? ? Web API會根據(jù)HTTP請求的謂詞來匹配操作方法,因此我們可以為控制器類增加一個[httpPost]和[HttpPut]等處理POST和PUT請求。

例 在WeatherForecastController中增加一個SaveNote方法:c# web api,.net core,c#,.net,asp.net,.netcore

? ? ? ? 運(yùn)行后發(fā)現(xiàn)在Swagger頁面中多出了一個Post請求選項(xiàng)。點(diǎn)擊【POST】,再點(diǎn)擊右上角的【Try it out】按鈕,出現(xiàn)了默認(rèn)JSON格式的請求報(bào)文模板:

c# web api,.net core,c#,.net,asp.net,.netcore

二、Restful

?2.1 什么是REST?

Web API開發(fā)有兩種風(fēng)格:

? ? ? ? 1.面向過程的 (簡稱RPC)

? ? ? ? 2.面向REST的(簡稱REST)

? ? ? ? 在RPC風(fēng)格的Web API中,通過“控制器/操作方法”的形式把服務(wù)器端的代碼當(dāng)做方法去調(diào)用。把HTTP當(dāng)成傳輸數(shù)據(jù)的通道,不關(guān)心HTTP謂詞。通過QueryString(查詢字符串)、請求報(bào)文體給服務(wù)器傳遞數(shù)據(jù)或者狀態(tài)碼::

  1. ?當(dāng)需要加載所有用戶的時(shí)候,我們就向/Persons/GetAll這個路徑發(fā)送GET請求.
  2. ?當(dāng)需要加載id=8的用戶的時(shí)候就向/Persons/GetById?id=8這個路徑發(fā)送GET請求.
  3. ?當(dāng)需要更新id=8的用戶的時(shí)候就向/Persons/Update這個路徑發(fā)送POST請求

那什么是REST:按照HTTP的語義來使用HTTP協(xié)議

  1. 使用URL進(jìn)行資源定位。獲取id=8:/user/8;獲取id=8的用戶的訂單列表:/user/8/orders.
  2. HTTP謂詞:GET(獲取資源)、POST(新增資源)、PUT(整體更新,不存在則創(chuàng)建),DELETE(刪除資源).
  3. DELETE、PUT、GET是冪等的,POST是不冪等的;

    ?何為冪等?

    ????????冪等就是對于一個接口采用同樣的參數(shù)請求一次和請求多次的結(jié)果是一致的,不會因?yàn)槎啻握埱蠖a(chǎn)生副作用。(比如一個人發(fā)表評論的時(shí)候由于網(wǎng)卡又點(diǎn)擊了一次發(fā)布,最終數(shù)據(jù)庫只保存了一次的發(fā)布內(nèi)容就是冪等)

  4. ?GET的響應(yīng)可以被緩存;
  5. ?服務(wù)端通過狀態(tài)碼反映資源獲取的結(jié)果:404(訪問用戶不存在),403(沒有權(quán)限),201(新增用戶請求成功);

?那么如何請求Restful風(fēng)格的控制器呢?

/*
    1.當(dāng)我們需要加載所有用戶的時(shí)候就向/api/Persons這個路徑發(fā)生GET請求,添加了
      [HttpGet]的GetPersons方法就會被調(diào)用
    2.當(dāng)我們需要加載id=8的用戶的時(shí)候,向/api/Person/8這個路徑發(fā)送GET請求,添加
      了[HttpGet("{id}")]的方法就會被調(diào)用
    ......................
    ......................
*/


[Route("api/[controller]")]
        public class PersonController : ControllerBase
        {
            [HttpGet]
            public IEnumerable<Person> GetPerson();

            [HttpGet("{id}")]
            public Person GetPerson(long id);

            [HttpPut("{id}")]
            public void UpdatePerson(long id,Person person)

            [HttpPost("{id}")]
            public void SavePerson(Person person);

            [HttpDelete("{id}")]
            public void DeletePerson(long id);

        }

2.2? Restful 的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

  • 通過URL進(jìn)行定位,避免使用QueryString,報(bào)文體定位,語義更清晰
  • 通過HTTP謂詞表示不同的操作,接口統(tǒng)一且具有自描述性
  • 可以對GET、PUT、DELETE等冪等操作失敗后進(jìn)行重試
  • 可以對GET請求進(jìn)行緩存,提升系統(tǒng)的訪問速度,降低服務(wù)器壓力
  • 通過HTTP狀態(tài)碼反映服務(wù)端的處理結(jié)果,能夠統(tǒng)一錯誤碼
  • 網(wǎng)管系統(tǒng)可以根據(jù)狀態(tài)碼來分析系統(tǒng)的訪問數(shù)據(jù)

缺點(diǎn):?

  • 真實(shí)系統(tǒng)中的資源非常復(fù)雜,很難清晰的進(jìn)行資源劃分
  • 不是所有的操作都能夠簡單的對應(yīng)到確定的HTTP謂詞中
  • 系統(tǒng)進(jìn)化可能改變冪等性
  • HTTP狀態(tài)碼個數(shù)有限,無法滿足
  • 有些客戶端可能不支持PUT、DELETE請求

三、Web API簡單實(shí)例

3.1 開發(fā)Web API

(1)創(chuàng)建一個控制器類:

    [Route("api/[controller]/[action]")]
    [ApiController]
    public class LoginController : ControllerBase
    {
        [HttpPost]
        public ActionResult<LoginResult> Login(LoginRequest loginReq)
        {
            if(loginReq.UserName=="admin" && loginReq.Password=="123456") 
            {
                var processes = Process.GetProcesses().Select(p => new ProcessInfo(
                    p.Id,p.ProcessName,p.WorkingSet)).ToArray();
                return new LoginResult(true, processes);
            }
            else
            {
                return new LoginResult(false, null);
            }
        }
    }
    //請求的參數(shù)信息
    public record LoginRequest(string UserName,string Password);
    //進(jìn)程信息,分別表示:       進(jìn)程ID     進(jìn)程名        進(jìn)程分配的物理內(nèi)存量
    public record ProcessInfo (int Id,string ProcessName, long WorkingSet);
    //請求信息是否正確
    public record LoginResult(bool IsOK, ProcessInfo[] Processes);

在Swagger頁面測試Login方法:

? ? ? ? 當(dāng)我們通過請求報(bào)文體設(shè)置錯誤的用戶信息時(shí):

c# web api,.net core,c#,.net,asp.net,.netcore

? ? ? ? 當(dāng)設(shè)置正確的信息時(shí):

c# web api,.net core,c#,.net,asp.net,.netcore文章來源地址http://www.zghlxwxcb.cn/news/detail-776724.html

?? ? ??

到了這里,關(guān)于【c#】了解開發(fā)Web API的基本方法的文章就介紹完了。如果您還想了解更多內(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)文章

  • 課程32:.Net Core Web API部署IIS

    2024年02月04日
    瀏覽(33)
  • .net core 6.0 web api 爬坑日記

    本人以前做前端開發(fā)的,就是 html , js , css , vue , react 那些 此前沒接觸過 .net 甚至沒接觸過 C# , 若哪里不對或有缺陷歡迎指出,以便改正! ^_^ 這是當(dāng)前所在公司的一個小項(xiàng)目 , 雖然這個項(xiàng)目不大, 但是奈何我又喜歡新版本,所以直接用的 .net core 6.0 而且多數(shù)問題百度, 谷歌 都只有

    2024年02月04日
    瀏覽(53)
  • ASP.NET Core 中的兩種 Web API

    ASP.NET Core 有兩種創(chuàng)建 RESTful Web API 的方式: 基于 Controller,使用完整的基于ControllerBase的基類定義接口endpoints。 基于 Minimal APIs,使用Lambda表達(dá)式定義接口 endpoints。 基于 Controller 的 Web API 可以使用構(gòu)造函數(shù)注入,或者屬性注入,遵循面向?qū)ο竽J健?基于 Minimal APIs 的 Web API 通

    2024年02月09日
    瀏覽(34)
  • 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 流式返回,逐字顯示

    ASP.NET Core Web API 流式返回,逐字顯示

    Websocket、SSE(Server-Sent Events)和長輪詢(Long Polling)都是用于網(wǎng)頁和服務(wù)端通信的技術(shù)。 Websocket是一種全雙工通信協(xié)議,能夠?qū)崿F(xiàn)客戶端和服務(wù)端之間的實(shí)時(shí)通信。它基于TCP協(xié)議,并且允許服務(wù)器主動向客戶端推送數(shù)據(jù),同時(shí)也允許客戶端向服務(wù)器發(fā)送數(shù)據(jù)。 SSE是一種單向

    2023年04月23日
    瀏覽(21)
  • 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)的時(shí)候,返回\\\"Hello World!\\\"。 這種方式的Web API可以用于構(gòu)建微服務(wù),極簡功能的網(wǎng)站。 下面代碼,將幾個 HTTP 請求的 url映射到 Lambda

    2024年02月10日
    瀏覽(25)
  • 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 中基于 Controller 的 Web API

    ASP.NET Core 中基于 Controller 的 Web API

    客戶端發(fā)送Http請求,Contoller響應(yīng)請求,并從數(shù)據(jù)庫讀取數(shù)據(jù),序列化數(shù)據(jù),然后通過 Http Response返回序列化的數(shù)據(jù)。 Web API 的所有controllers 一般繼承于 ControllerBase 類,而不是Controller 類。 因?yàn)?Controller 類也繼承自ControllerBase 類,但是支持views,而API一般不需要這個功能。 Co

    2024年02月10日
    瀏覽(30)
  • 2.1 .net 8 ASP.NET Core Web API - Controller詳解

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

    書接上回,上節(jié)我們留了幾個問題,即: 1、接口Hello的名字究竟怎么來的? 2、我們?nèi)绻氚呀涌诟某善渌拿Q,應(yīng)該怎么做? 3、我們繼承ControllerBase,以及[Route(“[controller]”)]屬性,又是分別起到什么作用? 需要解決以上幾個問題,我們就要繼續(xù)深入研究Controller相關(guān)的

    2024年02月20日
    瀏覽(22)
  • .Net6 Web Core API 配置 Autofac 封裝 --- 依賴注入

    .Net6 Web Core API 配置 Autofac 封裝 --- 依賴注入

    目錄 一、NuGet 包導(dǎo)入 二、Autofac 封裝類 三、Autofac 使用 四、案例測試 下列封裝 采取 程序集注入方法 , 單個依賴注入, 也適用, 可依賴注入的地方配置 Autofac Autofac.Extensions.DependencyInjection Autofac.Extras.DynamicProxy ? ?

    2024年02月14日
    瀏覽(97)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包