最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# WebAPI的幾種返回類型方式

 更新時間:2025年11月27日 10:49:57   作者:她說彩禮65萬  
本文主要介紹了C# WebAPI的幾種返回類型方式,包括直接返回指定類型、返回IActionResult實例和返回ActionResult,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在 ASP.NET Core 中有三種返回 數(shù)據(jù) 和 HTTP狀態(tài)碼 的方式,最簡單的就是直接返回指定的類型實例,如下代碼所示:

     [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        [HttpGet]
        public IEnumerable Get()
        {
            var rng = new Random();
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = rng.Next(-20, 55),
                Summary = Summaries[rng.Next(Summaries.Length)]
            })
            .ToArray();
        }
    }
 

除了這種,也可以返回 IActionResult 實例 和 ActionResult 實例。

雖然返回指定的類型 是最簡單粗暴的,但它只能返回數(shù)據(jù),附帶不了http狀態(tài)碼,而 IActionResult 實例可以將 數(shù)據(jù) + Http狀態(tài)碼 一同帶給前端,最后就是 ActionResult 它封裝了前面兩者,可以實現(xiàn)兩種模式的自由切換。

接下來一起討論下如何在 ASP.NET Core Web API 中使用這三種方式。

創(chuàng)建 Controller 和 Model 類

在項目的 Models 文件夾下新建一個 Author 類,代碼如下:

  public class Author
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
 

有了這個 Author 類,接下來創(chuàng)建一個 DefaultController 類。

using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
 
namespace IDGCoreWebAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class DefaultController : ControllerBase
    {
        private readonly List authors = new List();
        public DefaultController()
        {
            authors.Add(new Author()
            {
                Id = 1,
                FirstName = "Joydip",
                LastName = "Kanjilal"
            });
            authors.Add(new Author()
            {
                Id = 2,
                FirstName = "Steve",
                LastName = "Smith"
            });
        }
 
        [HttpGet]
        public IEnumerable Get()
        {
            return authors;
        }
 
        [HttpGet("{id}", Name = "Get")]
        public Author Get(int id)
        {
            return authors.Find(x => x.Id == id);
        }
    }
}
 

在 Action 中返回 指定類型

最簡單的方式就是在 Action 中直接返回一個 簡單類型 或者 復(fù)雜類型,其實在上面的代碼清單中,可以看到 Get 方法返回了一個 authors 集合,看清楚了,這個方法定義的是 IEnumerable。

[HttpGet]
public IEnumerable Get()
{
   return authors;
}

在 ASP.NET Core 3.0 開始,你不僅可以定義同步形式的 IEnumerable方法,也可以定義異步形式的 IAsyncEnumerable方法,后者的不同點在于它是一個異步模式的集合,好處就是 不阻塞 當(dāng)前的調(diào)用線程,關(guān)于 IAsyncEnumerable 更多的知識,我會在后面的文章中和大家分享。

下面的代碼展示了如何用 異步集合 來改造 Get 方法。

[HttpGet]
public async IAsyncEnumerable Get()
{
   var authors = await GetAuthors();
   await foreach (var author in authors)
   {
        yield return author;
   }
}

在 Action 中返回 IActionResult 實例

如果你要返回 data + httpcode 的雙重需求,那么 IActionResult 就是你要找的東西,下面的代碼片段展示了如何去實現(xiàn)。

[HttpGet]
public IActionResult Get()
{
  if (authors == null)
      return NotFound("No records");
 
  return Ok(authors);
}

上面的代碼有 Ok,NotFound 兩個方法,對應(yīng)著 OKResult,NotFoundResult, Http Code 對應(yīng)著 200,404。當(dāng)然還有其他的如:CreatedResult, NoContentResult, BadRequestResult, UnauthorizedResult, 和 UnsupportedMediaTypeResult,都是 IActionResult 的子類。

在 Action 中返回ActionResult實例

ActionResult 是在 ASP.NET Core 2.1 中被引入的,它的作用就是包裝了前面這種模式,怎么理解呢? 就是即可以返回 IActionResult ,也可以返回指定類型,從 ActionResult 類下的兩個構(gòu)造函數(shù)中就可以看的出來。

public sealed class ActionResult : IConvertToActionResult
{
	public ActionResult Result  {get;}
 
	public TValue Value  {get;}
 
	public ActionResult(TValue value)
	{
		if (typeof(IActionResult).IsAssignableFrom(typeof(TValue)))
		{
			throw new ArgumentException(Resources.FormatInvalidTypeTForActionResultOfT(typeof(TValue), "ActionResult"));
		}
		Value = value;
	}
 
	public ActionResult(ActionResult result)
	{
		if (typeof(IActionResult).IsAssignableFrom(typeof(TValue)))
		{
			throw new ArgumentException(Resources.FormatInvalidTypeTForActionResultOfT(typeof(TValue), "ActionResult"));
		}
		Result = (result ?? throw new ArgumentNullException("result"));
	}
}

有了這個基礎(chǔ),接下來看看如何在 Action 方法中去接這兩種類型。

[HttpGet]
public ActionResult> Get()
{
  if (authors == null)
       return NotFound("No records");
   return authors;
}

和文章之前的 Get 方法相比,這里直接返回 authors 而不需要再用 OK(authors) 包裝,是不是一個非常好的簡化呢? 接下來再把 Get 方法異步化,首先考慮下面返回 authors 集合的異步方法。

private async Task> GetAuthors()
{
    await Task.Delay(100).ConfigureAwait(false);
    return authors;
}

值得注意的是,異步方法必須要有至少一個 await 語句,如果不這樣做的話,編譯器會提示一個警告錯誤,告知你這個方法將會被 同步執(zhí)行,為了避免出現(xiàn)這種尷尬,我在 Task.Delay 上做了一個 await。

下面就是更新后的 Get 方法,注意一下這里我用了 await 去調(diào)用剛才創(chuàng)建的異步方法,代碼參考如下。

[HttpGet]
public async Task>> Get()
{
   var data = await GetAuthors();
   if (data == null)
        return NotFound("No record");
   return data;
}

如果你有一些定制化需求,可以實現(xiàn)一個自定義的 ActionResult 類,做法就是實現(xiàn) IActionResult 中的 ExecuteResultAsync 方法即可。

到此這篇關(guān)于C# WebAPI的幾種返回類型方式的文章就介紹到這了,更多相關(guān)C# WebAPI返回類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#自定義事件之屬性改變引發(fā)事件示例

    C#自定義事件之屬性改變引發(fā)事件示例

    這篇文章主要為大家詳細(xì)介紹了C#自定義事件之屬性改變引發(fā)事件示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • C#窗體實現(xiàn)點餐系統(tǒng)

    C#窗體實現(xiàn)點餐系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C#窗體實現(xiàn)點餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 詳解C++中類的大小決定因數(shù)

    詳解C++中類的大小決定因數(shù)

    類的大小受多個因素影響,主要包括成員變量、對齊方式、繼承關(guān)系、虛函數(shù)表等,下面就來介紹一下,具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • c# 實現(xiàn)RSA非對稱加密算法

    c# 實現(xiàn)RSA非對稱加密算法

    RSA解決了對稱加密的一個不足,比如AES算法加密和解密時使用的是同一個秘鑰,因此這個秘鑰不能公開,因此對于需要公開秘鑰的場合,我們需要在加密和解密過程中使用不同的秘鑰,加密使用的公鑰可以公開,解密使用的私鑰要保密,這就是非對稱加密的好處?!?/div> 2021-06-06
  • c# Process.Start()找不到系統(tǒng)文件的解決方法

    c# Process.Start()找不到系統(tǒng)文件的解決方法

    vs1027在X64應(yīng)用程序下執(zhí)行process.start()時,OK;但是在X86應(yīng)用程序下執(zhí)行process.start(),報錯:找不到系統(tǒng)文件,本文就詳細(xì)的介紹一下解決方法,感興趣的可以了解一下
    2023-09-09
  • 基于C#實現(xiàn)屏幕取色器的示例詳解

    基于C#實現(xiàn)屏幕取色器的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實現(xiàn)屏幕取色器,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以了解一下
    2022-12-12
  • C#判斷一個圖像是否是透明的GIF圖的方法

    C#判斷一個圖像是否是透明的GIF圖的方法

    這篇文章主要介紹了C#判斷一個圖像是否是透明的GIF圖的方法,涉及C#針對gif圖片屬性的相關(guān)操作技巧,需要的朋友可以參考下
    2015-06-06
  • C#泛型運作原理的深入理解

    C#泛型運作原理的深入理解

    這篇文章主要給大家介紹了關(guān)于C#泛型運作原理的深入理解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C#使用Mutex簡單實現(xiàn)程序單實例運行的方法

    C#使用Mutex簡單實現(xiàn)程序單實例運行的方法

    這篇文章主要介紹了C#使用Mutex簡單實現(xiàn)程序單實例運行的方法,涉及C#實現(xiàn)單實例程序運行的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • C#實現(xiàn)textbox文本多行輸出且自動換行輸出

    C#實現(xiàn)textbox文本多行輸出且自動換行輸出

    在WinForms中通過設(shè)置TextBox的Multiline和WordWrap屬性實現(xiàn)多行輸出且自動換行,可以通過設(shè)計器或代碼設(shè)置以上兩個屬性,文本輸出方法包括直接賦值、追加文本和循環(huán)輸出,完整示例代碼展示了設(shè)計器設(shè)置后的代碼實現(xiàn),需要的朋友可以參考下
    2026-04-04

最新評論

吉木萨尔县| 齐齐哈尔市| 山丹县| 新绛县| 六枝特区| 时尚| 和顺县| 白朗县| 中方县| 大姚县| 滕州市| 浦县| 德惠市| 社旗县| 万载县| 翁源县| 永泰县| 偏关县| 梅河口市| 五峰| 河西区| 石楼县| 班玛县| 松溪县| 新绛县| 尖扎县| 景洪市| 保靖县| 旬阳县| 宜章县| 甘洛县| 原阳县| 兴和县| 绥江县| 南溪县| 武乡县| 炉霍县| 金华市| 大宁县| 上栗县| 宜州市|