1. webapi的方法可以同步也可以异步 如下 测试代码
有异步 [httpget]要加上 [action] 。否则报错
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace aspnetcore004.Controllers
{
//有异步 [httpget]要加上 [action] 否则报错
[Route("api/[controller]/[action]")]
[ApiController]
public class TestController : ControllerBase
{
//下面为同步方法
[HttpGet]
public int Add(int i , int j)
{
return i+j;
}
//下面为异步方法,框架调用,直接使用
[HttpGet]
public async Task<string> Test()
{
string s =await System.IO.File.ReadAllTextAsync("D:/1.txt");
return s;
}
}
}
2. webapi 控制器 可以 不继承 ControllerBase也可以使用,主要方便 单元测试 如下代码
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace aspnetcore004.Controllers
{
//不继承 controllerbase 需要写下面 两个 特性 框架可以识别出api接口
[Route("api/[controller]")]
[ApiController]
public class Test2Controller
{
[HttpGet]
public int Add(int i ,int j)
{
return i + j;
}
}
}
3.webapi 返回普通类类型 默认为json格式
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace aspnetcore004.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class Test3Controller : ControllerBase
{
[HttpGet]
public Person GetPerson()
{
return new Person(1, "张三");
}
}
}
//返回结果为
{
"id": 1,
"name": "张三"
}
4. webapi 可以返回 IActionResult 和 ActionResult<类型>
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace aspnetcore004.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class Test4Controller : ControllerBase
{
//第一种写法
public IActionResult GetGrade(int id)
{
if(id == 1)
{
//返回的是int 这里只能用 ok函数做为转换
return Ok(88);
}else if (id == 2)
{
return Ok(99);
}
else
{
//重点是这里 ,如果 webapi不返回 IActionResult 则不可使用NotFound
//这个是 返回一个 404 错误 并且显示错误信息。
return NotFound("id错误,没有找到");
}
}
//第二种写法
public ActionResult<int> GetGrade2(int id)
{
if (id == 1)
{
//第二种方法 直接 返回 int 因为 IActionResult 派生 ActionResult
return 88;
}
else if (id == 2)
{
return 99;
}
else
{
//它的返回值 继承 ActionResult
return NotFound("id错误,没有找到");
}
}
}
}