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

ASP.NET Core 中基于 Controller 的 Web API

這篇具有很好參考價值的文章主要介紹了ASP.NET Core 中基于 Controller 的 Web API。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

基于 Controller 的 Web API

ASP.NET Wep API 的請求架構(gòu)

ASP.NET Core 中基于 Controller 的 Web API,.NET Core,asp.net,后端
客戶端發(fā)送Http請求,Contoller響應(yīng)請求,并從數(shù)據(jù)庫讀取數(shù)據(jù),序列化數(shù)據(jù),然后通過 Http Response返回序列化的數(shù)據(jù)。

ControllerBase 類

Web API 的所有controllers 一般繼承于 ControllerBase 類,而不是Controller 類。
因為 Controller 類也繼承自ControllerBase 類,但是支持views,而API一般不需要這個功能。

ControllerBase 提供了很多處理Http Request 和 Response方法,比如返回201結(jié)果的CreatedAtAction(表示成功創(chuàng)建資源):

[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public ActionResult<Pet> Create(Pet pet)
{
    pet.Id = _petsInMemoryStore.Any() ? 
             _petsInMemoryStore.Max(p => p.Id) + 1 : 1;
    _petsInMemoryStore.Add(pet);

    return CreatedAtAction(nameof(GetById), new { id = pet.Id }, pet);
}

其他一些主要方法:

  • Ok(),返回空的 http code 200
  • File(),返回文件和 http code 200,或者返回部分文件和 http code 206,或者不支持的Range和http code 416
  • PhysicalFile(),返回文件和 http code 200,或者返回部分文件和 http code 206,或者不支持的Range和http code 416
  • CreatedAtAction(),返回 http code 201
  • AcceptedAtAction(),返回 http code 202
  • NoContent(),返回 http code 204
  • Content(),返回具體結(jié)果,plain-text 格式
  • RedirectToActionPermanent(),返回 http code 301
  • RedirectToPagePermanent(),返回 http code 301
  • RedirectToPage(),返回 http code 302
  • RedirectToRoute(),返回 http code 302
  • RedirectToAction(),返回 http code 302
  • RedirectToActionPreserveMethod(),返回 http code 307
  • RedirectToPagePreserveMethod(),返回 http code 307
  • RedirectToActionPermanentPreserveMethod(),返回 http code 308
  • RedirectToPagePermanentPreserveMethod(),返回 http code 308
  • BadRequest(),返回 http code 400
  • Problem(),返回 http code 400
  • ValidationProblem(),返回 http code 400
  • Unauthorized(),返回 http code 401
  • Challenge(),返回 http code 401 或 403
  • Forbid() ,返回 http code 403
  • NotFound(),返回 http code 404
  • Conflict() ,返回 http code 409
  • UnprocessableEntity(),返回 http code 422
  • SignIn()
  • SignOut()
  • StatusCode(Int32)

重要的屬性

  • ControllerContext
  • HttpContext,獲取當(dāng)前action的HttpContext
  • Url,IUrlHelper對象
  • Request,獲取當(dāng)前action的HttpRequest
  • Response,獲取當(dāng)前action的HttpResponse
  • RouteData,獲取當(dāng)前action的RouteData
  • User,獲取當(dāng)前action關(guān)聯(lián)的User的ClaimsPrincipal

重要的Attributes

標(biāo)識 Action的功能,包括:

  • [ApiController],表示這個Action為HTTP API responses服務(wù)。包括:
    • 必須要指定 [Route(“[controller]”)]
    • 自動驗證model
    • 自動bind,包括[FromBody]等
    • 推斷 multipart/form-data 的類型
  • [Area],指定Route
  • [Bind],
  • Route,指定Route
  • [Consumes],指定action 接收的數(shù)據(jù)類型,比如 [Consumes(“application/xml”)], [Consumes(“application/json”)],[Consumes(“application/x-www-form-urlencoded”)]
  • [Produces],指定action 返回的數(shù)據(jù)類型
  • [HttpGet],
  • [HttpDelete],
  • [HttpPost],
  • [HttpPut],
  • [HttpPatch],
  • [HttpOptions],
  • [HttpHead],
  • [NonAction],表示不是Action方法
  • [NonController],表示不是NonController方法
  • [FromBody],標(biāo)識參數(shù)或?qū)傩钥梢越壎˙ody,比如:
    • public IActionResult Action3([FromBody] Product product, [FromBody] Order order)
  • [FromHeader],
  • [FromForm],

格式化Action 的返回結(jié)果

Action 不一定要返回某個特定類型,ASP.NET Core 支持任何對象類型。
Actions 可以忽略 HttpRequest的Header的Accept,返回自己想要的類型。
如果返回結(jié)果類型不是IActionResult,那么會被序列化。

ControllerBase.Ok 默認(rèn)返回Json類型。
Http Reponse 的 content-type: application/json; charset=utf-8.

[HttpGet]
public IActionResult Get()
    => Ok(todoItemStore.GetList());

而下面這個,Content-Type是text/plain。

[HttpGet("Version")]
public ContentResult GetVersion()
    => Content("v1.0.0");

協(xié)商結(jié)果類型

當(dāng)HttpRequest 指定了Header的Accept,而 Action返回的類型是JSON時,會發(fā)生結(jié)果協(xié)商
ASP.NET Core 默認(rèn)支持的結(jié)果類型:

  • application/json
  • text/json
  • text/plain
  1. 當(dāng)Header的Accept中指定了一個類型是Action支持的類型時,則返回這個類型。
  2. 如果Action不支持指定的類型,且設(shè)置了MvcOptions.ReturnHttpNotAcceptable為true,則返回406。
  3. 用Action中第一個formatter 返回結(jié)果。
  4. 當(dāng)Header的Accept中沒有指定類型時,用Action中第一個formatter 返回結(jié)果。
  5. 當(dāng)Header的Accept中包含"/"時,會被忽略,由Action決定。
  6. 當(dāng)請求來自于瀏覽器時,Accept 會被忽略,由Action決定,默認(rèn)返回JSON。
  7. 當(dāng)請求來自于瀏覽器時,Accept 會被忽略,如果Host設(shè)置了RespectBrowserAcceptHeader為true,則使用瀏覽器的header。

如果 Action返回的結(jié)果是復(fù)雜類型時,.NET 會創(chuàng)建一個 ObjectResult,封裝結(jié)果,然后序列化成協(xié)商的結(jié)果類型。比如:

[HttpGet("{id:long}")]
public TodoItem? GetById(long id)
    => _todoItemStore.GetById(id);

設(shè)置成XML結(jié)果類型

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers()
    .AddXmlSerializerFormatters();

設(shè)置成使用json.net的結(jié)果類型

默認(rèn)的JSON格式是基于System.Text.Json的。文章來源地址http://www.zghlxwxcb.cn/news/detail-686950.html

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers()
    .AddNewtonsoftJson();

到了這里,關(guān)于ASP.NET Core 中基于 Controller 的 Web API的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 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驗證

    ASP.NET Core Web API之Token驗證

    在實際開發(fā)中,我們經(jīng)常需要對外提供接口以便客戶獲取數(shù)據(jù),由于數(shù)據(jù)屬于私密信息,并不能隨意供其他人訪問,所以就需要驗證客戶身份。那么如何才能驗證客戶的什么呢?今天以一個簡單的小例子,簡述ASP.NET Core Web API開發(fā)過程中,常用的一種JWT身份驗證方式。僅供學(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ù)端之間的實時通信。它基于TCP協(xié)議,并且允許服務(wù)器主動向客戶端推送數(shù)據(jù),同時也允許客戶端向服務(wù)器發(fā)送數(shù)據(jù)。 SSE是一種單向

    2023年04月23日
    瀏覽(21)
  • ASP.NET Core Web API入門之三:使用EF Core

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

    一般來講我們做項目都會用實體類跟數(shù)據(jù)庫實體進(jìn)行關(guān)系對應(yīng),這樣的好處方便我們維護、增刪改查,并且可以減少SQL的編寫,從而統(tǒng)一風(fēng)格,那么 Entity Framework Core 就是很不錯的ORM框架。 1、跨數(shù)據(jù)庫支持能力強大,只需修改配置就可以輕松實現(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 中無法直接從實例中得知客戶端提供了哪

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

    ASP.NET Core Web API 流式返回,實現(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ù)字智慧化基地),里面有很多 高價值 技術(shù)文章, 是你刻苦努力也積累不到的經(jīng)驗 ,能助你快速成長。升職

    2024年02月22日
    瀏覽(26)
  • ASP.NET Core 的 Web Api 實現(xiàn)限流 中間件

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

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

    2024年01月17日
    瀏覽(18)
  • 如何將.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ù)的方法,其實真正的目的是為了探索如何將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 項目創(chuàng)建之 Hello,World

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

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

    2024年01月20日
    瀏覽(34)
  • C# ASP.NET Core Web API 身份授權(quán)(JWT)驗證(一)

    C# ASP.NET Core Web API 身份授權(quán)(JWT)驗證(一)

    1.開發(fā)環(huán)境 VS2022,安裝時記得勾選ASP.NET有關(guān)的都選上,建議全選,省的麻煩。 ???????? 2.創(chuàng)建初始工程 TestApi (你自己的工程名稱)。 ? ?這就創(chuàng)建工程成功了,按 F5 則可以進(jìn)行調(diào)試了。 而在項目中,我們不僅僅會用到基礎(chǔ)的api功能,我們一般還會用到? 身份授權(quán)(J

    2024年02月02日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包