ASP.NET Core WebAPI的异步及返回值

目录

Action方法的异步

Action方法参数

捕捉URL占位符

捕捉QueryString的值

JSON报文体

其他方式


Action方法的异步

  1. Action方法既可以同步也可以异步。
  2. 异步Action方法的名字一般不需要以Async结尾。
  3. Web API中Action方法的返回值如果是普通数据类型,那么返回值就会默认被序列化为Json格式。
  4. Web API中的Action方法的返回值同样支持IActionResult类型,不包含类型信息,因此Swagger等无法推断出类型,所以推荐用ActionResult<T>,它支持类型转换,从而用起来更简单
cs 复制代码
[HttpGet]
public ActionResult<int> GetId(long id)
{
    if (id == 1)
    {
        return 88;
    }
    else if (id == 2)
    {
        return 99;
    }
    else
    {
        return NotFound("id错误");
    }
}

Action方法参数

捕捉URL占位符

  1. 在[HttpGet]、[HttpPost]等中使用占位符,比如{schoolName},捕捉路径中的内容,从而供Action方法的参数使用。
  2. 捕捉的值会被自动赋值给Action中同名的参数;如果名字不一致,可以用[FromRoute(Name="名字")]
  1. /Person/GetStudent/school/MIT/class/2025
  2. HttpGet("school/{ schoolName}/class/{ classNo}")

捕捉QueryString的值

使用[FromQuery]来获取QueryString中的值。如果名字一致,只要为参数添加[FromQuery]即可;而如果名字不一致,[FromQuery(Name = 名字)]。QueryString和Route可以混用。

cs 复制代码
[HttpGet("students/school/{schoolName}/class/{classNo}")]
public Person GetStudent([FromRoute(Name = "schoolName")] string schoolName, [FromRoute(Name = "classNo")] long classNo)
{
    return new Person(classNo, schoolName, 18);
}

JSON报文体

  1. Web API的开发模式下,Json格式的请求体是主流。

  2. 只要声明一个模型类和Json请求的格式一致即可。

  3. 也是可以把从URL获取参数、从请求报文体获取数据等这些混合使用。

    cs 复制代码
     [HttpPost("classId/{classId}")]
     public ActionResult<long> AddNew(long classId, StudentModel s)
  4. 一定要设定请求头中的Content-Type为application/json,而且数据必须是合法的json格式。

其他方式

Web API中很少用的方式:

1、从Content-Type为multipart/form-data的请求中获取数据的[FromForm]

2、从请求报文头中获取值的[FromHeader]。

相关推荐
deriva2 天前
.netcore+ef+redis+rabbitmq+dotcap先同步后异步再同步的方法,亲测有效
redis·rabbitmq·.netcore
棉晗榜18 天前
C# .net core添加单元测试项目,依赖注入接口测试
单元测试·c#·.netcore
时光追逐者18 天前
.NET初级软件工程师面试经验分享
经验分享·面试·职场和发展·c#·.net·.netcore
忧郁的蛋~19 天前
.NET Core 实现缓存的预热的方式
缓存·c#·.net·.netcore
csdn_aspnet20 天前
C# .NET Core 源代码生成器(dotnet source generators)
c#·.netcore
时光追逐者20 天前
C#/.NET/.NET Core技术前沿周刊 | 第 42 期(2025年6.9-6.15)
c#·.net·.netcore
csdn_aspnet21 天前
使用 C# 源生成器(Source Generators)进行高效开发:增强 Blazor 及其他功能
c#·.netcore
lgaof65822@gmail.com23 天前
Asp.Net Core SignalR导入数据
前端·后端·asp.net·.netcore
眸笑丶23 天前
.NET Core 数据库连接字符串加密与解密
数据库·oracle·.netcore
时光追逐者1 个月前
C#/.NET/.NET Core技术前沿周刊 | 第 41 期(2025年6.1-6.8)
c#·.net·.netcore