WebAPI 参数和返回值

四季该很好,你若尚在场。 --zhu
控制器类
1、ControllerBase与Controller
2、控制器类可以不显式的继承自任何类。

Action方法的异步
1、Action方法既可以同步也可以异步。
2、异步Action方法的名字一般不需要以Async结尾。
3、WebAPI中Action方法的返回值如果是普通数据类型,那么返回值就会默认被序列化为Json格式。
4、WebAPI中的Action方法的返回值同样支持IActionResult类型,不包含类型信息,因此SWagger等无法推断出类型,所以推荐使用ActionResult,它支持类型转换,使用更简单。

public ActionResult<Person> GetPerson(int id)
{
  if(id<=0)
    return BadRequest("id必须正确");
  else  if(id==1)
    return BadRequest(1,"之士",18);
  else if(id==2)
    return BadRequest(2,"芝士",28);
  else
  return NotFound("人员不存在");
}

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

[HttpGet("school/{schoolName}/class/{classNo}")]
public Person GetStudents(string schoolName,[FromRoute(Name="classNo")] int classNum)
{
  return new Person {Id=classNum+6,Name=schoolName+"学校"};
}

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

[HttpPost]
public int Save(FromQuery(Name="aaa")int i,int j)
{
  return i+j;
}

Json报文体
1、WebAPI的开发模式下,Json格式的请求体是主流。
2、只要声明一个模型类和Json请求的格式一致即可。
3、可以把从URL获取参数、请求报文体获取数据等混用。

[HttpPost("classId/{classId}")]
public ActionResult<long> AddNew(long classId,StudentModel s)
{
}

4、一定要设定请求头中的Content-Type为application/json,而且数据必须是合法的json格式。

其他方式
WebAPI很少用的方式:
1、从Content-Type为multipart/from-data的请求中获取数据的[FromForm]。上传文件?
2、从请求报文头中获取值的[FromHeader]。

posted on 2024-07-24 21:31  小脑虎爱学习  阅读(1)  评论(0编辑  收藏  举报