欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET?Core使用Swagger/OpenAPI規(guī)范

 更新時(shí)間:2022年04月08日 10:48:00   作者:暗斷腸  
這篇文章介紹了ASP.NET?Core使用Swagger/OpenAPI規(guī)范的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1.什么是Swagger/OpenAPI?

Swagger是一個(gè)與語(yǔ)言無關(guān)的規(guī)范,用于描述REST API。因?yàn)镾wagger項(xiàng)目已捐贈(zèng)給OpenAPI計(jì)劃,所以也叫OpenAPI。它允許計(jì)算機(jī)和人員了解服務(wù)的功能,可以直接在線訪問測(cè)試API方法。而Swagger UI提供了基于Web的UI,它使用生成的Swagger規(guī)范提供有關(guān)服務(wù)API的信息。Swashbuckle和NSwag均包含Swagger UI的嵌入式版本,因此可使用中間件注冊(cè)調(diào)用將該嵌入式版本托管在ASP.NET Core應(yīng)用程序當(dāng)中。Swagger的核心是Swagger規(guī)范,默認(rèn)情況下是名為swagger.json的文檔。它由Swagger工具鏈(或其第三方實(shí)現(xiàn))根據(jù)你的服務(wù)生成。它描述了API的功能以及使用HTTP對(duì)其進(jìn)行訪問的方式。它驅(qū)動(dòng)Swagger UI,并由工具鏈用來啟用發(fā)現(xiàn)和客戶端代碼生成。

2.NET Swagger實(shí)現(xiàn)

NET Swagger實(shí)現(xiàn)分為兩大分類:

  • Swashbuckle.AspNetCore是一個(gè)開源項(xiàng)目,用于生成ASP.NET Core Web API的Swagger文檔。
  • NSwag是另一個(gè)用于生成Swagger文檔并將Swagger UI或ReDoc集成到ASP.NET Core Web API中的開源項(xiàng)目。此外,NSwag 還提供了為API生成C#和TypeScript客戶端代碼的方法。

但是由于工作比較忙,我就不打算兩個(gè)類型都講了,我只選擇Swashbuckle.AspNetCore來講解和演示。

3.Swashbuckle主要組成部分

Swashbuckle有三個(gè)主要組成部分:

  • Swashbuckle.AspNetCore.Swagger:將SwaggerDocument對(duì)象公開為JSON終結(jié)點(diǎn)的Swagger對(duì)象模型和中間件。
  • Swashbuckle.AspNetCore.SwaggerGen:從路由、控制器和模型直接生成SwaggerDocument對(duì)象的Swagger生成器。它通常與Swagger終結(jié)點(diǎn)中間件結(jié)合,以自動(dòng)公開Swagger JSON。
  • Swashbuckle.AspNetCore.SwaggerUI:Swagger UI工具的嵌入式版本。它解釋Swagger JSON以構(gòu)建描述Web API功能的可自定義的豐富體驗(yàn),它包括針對(duì)公共方法的內(nèi)置測(cè)試工具。

安裝Swashbuckle組件方法有兩種:

--PowerShell
Install-Package Swashbuckle.AspNetCore -Version 5.0.0

or

--.NET Core CLI
dotnet add TodoApi.csproj package Swashbuckle.AspNetCore -v 5.0.0

4.什么是REST?

我百度一下,度娘解釋是:REST是(Representational State Transfer)“表現(xiàn)層狀態(tài)轉(zhuǎn)移”的縮寫,它是由羅伊·菲爾?。≧oy Fielding)提出的,是用來描述創(chuàng)建HTTP API的標(biāo)準(zhǔn)方法,他發(fā)現(xiàn)這四種常用的行為“查看(view),創(chuàng)建(create),編輯(edit)和刪除(delete)”都可以直接映射到HTTP中已實(shí)現(xiàn)的GET、POST、PUT和DELETE方法。

5.配置Swagger中間件

將Swagger生成器添加到Startup.ConfigureServices方法中的服務(wù)集合中:

//注冊(cè)Swagger生成器,定義一個(gè)或多個(gè)Swagger文檔.
services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1", Description = "測(cè)試描述" });
});

OpenApiInfo對(duì)象是用來標(biāo)識(shí)Swagger文檔信息(諸如作者、許可證和說明的信息),您還可以自定義您的主題的信息顯示在UI上,詳情配置,我就不多說,大家可以看官網(wǎng)描述,如上述OpenApilnfo信息配置示例圖:

而在啟動(dòng)應(yīng)用程序后并導(dǎo)航到http://localhost:<port>/swagger/v1/swagger.json。生成的描述終結(jié)點(diǎn)的文檔顯示在Swagger規(guī)范(swagger.json)中:

在Startup.Configure方法中,啟用中間件為生成的JSON文檔和Swagger UI提供服務(wù):

//使中間件能夠?qū)⑸傻腟wagger用作JSON端點(diǎn).
app.UseSwagger();
//允許中間件為swagger ui(HTML、JS、CSS等)提供服務(wù),指定swagger JSON端點(diǎn).
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});

根據(jù)上述配置就能夠啟用swagger測(cè)試API服務(wù)接口了,如下圖所示:

6.XML注釋

swagger還可以把服務(wù)API中對(duì)應(yīng)方法名稱,實(shí)體屬性注釋給在UI上顯示出來,讓您更加直觀了解每個(gè)方法使用信息,并對(duì)沒有注釋每個(gè)方法進(jìn)行警告提示,具體啟用XML注釋操作在“解決方案資源管理器”中右鍵單擊該項(xiàng)目,然后選擇“編輯<project_name>.csproj”,手動(dòng)將突出顯示的行添加到.csproj 文件:

<PropertyGroup>
  <GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>

在啟用了XML注釋后,swagger只會(huì)針對(duì)沒有添加注釋每個(gè)方法進(jìn)行警告提示,而添加了注釋的方法則不會(huì)進(jìn)行警告提示:

而每個(gè)添加了注釋的方法會(huì)通過在Startup.ConfigureServices/services.AddSwaggerGen中設(shè)置Swagger JSON和UI的注釋路徑后:

//設(shè)置Swagger JSON和UI的注釋路徑.
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
c.IncludeXmlComments(xmlPath);

會(huì)在項(xiàng)目根目錄生成的一個(gè)對(duì)應(yīng)項(xiàng)目文件名的XML文件,而文件里面就包含所有已注釋的方法,用于UI上顯示:

在啟動(dòng)應(yīng)用程序后,我們會(huì)看到每個(gè)有注釋方法在左側(cè)會(huì)有一行文字描述,效果如下圖所示:

如果某個(gè)方法或者類下面所有方法不想警告提示,可以通過加入#pragma warning disable聲明屏蔽警告提示:

加入聲明之后,大家會(huì)看到警告提示消失了。

7.數(shù)據(jù)注釋

可以使用System.ComponentModel.DataAnnotations命名空間中的屬性來標(biāo)記模型實(shí)體,以幫助驅(qū)動(dòng)Swagger UI 組件。將[Required]屬性添加到TodoItem類的Name屬性:

namespace TodoApi.Models
{
    public class TodoItem
    {
        public long Id { get; set; }
        [Required]
        public string Name { get; set; }
        [DefaultValue(false)]
        public bool IsComplete { get; set; }
    }
}

此屬性的狀態(tài)會(huì)更改掉基礎(chǔ)JSON架構(gòu):

而將[Produces("application/json")]屬性添加到API控制器去,這樣做的目的是聲明控制器的操作支持application/json的響應(yīng)內(nèi)容類型:

[Produces("application/json")]
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    /// <summary>
    /// 獲取值
    /// </summary>
    /// <returns></returns>
    // GET api/values
    [HttpGet]
    public async Task<ActionResult<IEnumerable<string>>> Get()
    {
        var result = await new GitHubApi().GetUser();
        return new string[] { result.id.Value.ToString(), result.login };
    }
}

“響應(yīng)內(nèi)容類型”下拉列表選此內(nèi)容類型作為控制器的默認(rèn)GET操作:

Swagger/OpenAPI出現(xiàn),大大減少開發(fā)者調(diào)試時(shí)間,增加開發(fā)者開發(fā)效率,讓開發(fā)者更加方便調(diào)試跟直觀了解對(duì)應(yīng)服務(wù)方法。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • .NET Core中反解ObjectId

    .NET Core中反解ObjectId

    這篇文章主要介紹了.NET Core中實(shí)現(xiàn)ObjectId反解的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • Aspnetpager對(duì)GridView分頁(yè)并順利導(dǎo)出Excel

    Aspnetpager對(duì)GridView分頁(yè)并順利導(dǎo)出Excel

    這篇文章主要介紹了Aspnetpager對(duì)GridView分頁(yè)并順利導(dǎo)出Excel的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • gojs一些實(shí)用的高級(jí)用法

    gojs一些實(shí)用的高級(jí)用法

    gojs是一個(gè)非常強(qiáng)大的可視化關(guān)系的js庫(kù)。本文介紹的是在使用gojs制作圖的過程中,你可能會(huì)碰到的問題的一些解決方案。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • asp.net實(shí)現(xiàn)獲取客戶端詳細(xì)信息

    asp.net實(shí)現(xiàn)獲取客戶端詳細(xì)信息

    這篇文章主要介紹了asp.net實(shí)現(xiàn)獲取客戶端詳細(xì)信息,包括客戶端瀏覽器及主機(jī)信息,感興趣的小伙伴們可以參考一下
    2015-12-12
  • ajaxToolkit:TextBoxWatermarkExtender演示與實(shí)現(xiàn)代碼

    ajaxToolkit:TextBoxWatermarkExtender演示與實(shí)現(xiàn)代碼

    該控件的效果就是在TextBox控件上添加“水印”效果,也就是當(dāng)TextBox為空時(shí),顯示提示消息,一旦TextBox聚焦,樣式就消失,看起來還挺不錯(cuò)的嗎,感興趣的你可以了解下哦,希望本文對(duì)你有所幫助
    2013-01-01
  • asp.net ToString()格式設(shè)置大全

    asp.net ToString()格式設(shè)置大全

    比較全的tostring()格式設(shè)置參數(shù),大家以后用的到。
    2009-04-04
  • ASP.NET CORE學(xué)習(xí)教程之自定義異常處理詳解

    ASP.NET CORE學(xué)習(xí)教程之自定義異常處理詳解

    這篇文章主要給大家介紹了關(guān)于ASP.NET CORE學(xué)習(xí)教程之自定義異常處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • ASP.NET Core中間件設(shè)置教程(7)

    ASP.NET Core中間件設(shè)置教程(7)

    這篇文章主要為大家詳細(xì)介紹了ASP.NET Core中間件的設(shè)置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • .NET Core對(duì)象池的應(yīng)用:編程篇

    .NET Core對(duì)象池的應(yīng)用:編程篇

    對(duì)象池就是對(duì)象的容器,旨在優(yōu)化資源的使用,通過在一個(gè)容器中池化對(duì)象,并根據(jù)需要重復(fù)使用這些池化對(duì)象來滿足性能上的需求。這篇文章主要介紹了.NET Core對(duì)象池的應(yīng)用,感興趣的小伙伴可以參考一下
    2021-09-09
  • Asp.net Core 如何設(shè)置黑白名單(路由限制)

    Asp.net Core 如何設(shè)置黑白名單(路由限制)

    本文主要介紹了Asp.net Core 如何設(shè)置黑白名單(路由限制),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評(píng)論