控制器 Controller
大约 2 分钟
控制器 Controller
- 控制器类可以不显式地继承自任何类,也可以继承 ControllerBase 类
- Action方法既可以同步也可以异步,异步Action方法的名字一般不需要以Async结尾
参数获取
使用占位符获取路径中的参数
// 请求路径 /Students/GetAll/school/MIT/class/A001 [Route("Students/GetAll")] [ApiController] public class Demo:ControllerBase { [HttpGet("school/{schoolName}/class/{classNo}")] public ActringResult<T> GetStudents(string schoolName,string classNo){/*...*/} // 同名参数将被自动赋值给 Action 参数 // 名字不一致时,使用 [FromRoute(Name="名字")] 修饰参数 }
捕获 QueryString 参数值
// 请求路径 /Students/GetAll?school=FirstScjool&class=A001 [HttpGet] public ActringResult<T> GetStudents([FromQuery]string schoolName,[FromQuery(Name="class")]int classNo){/*...*/} // [FromQuery] 同名参数将被自动赋值给 Action 参数, 名字不一致时需要传入参数
QueryString 和 Route 可以混用
可以声明一个模型类与 Json 请求一致,可以自动装配对象
请求头中的 Content-Type 必须为 application/json,而且数据必须是合法的json格式。
[ApiController] [Route("Students")] public class StudentsController : ControllerBase { [HttpPost] public ActionResult<Student> GetById(StudentRequestMessage msg) { Console.WriteLine("msg:"+msg); // 报文体 Json 被自动装配到 StudentRequestMessage return new ActionResult<Student>(new Student("张三", 15)); } } public record StudentRequestMessage(int Id);
【不常用】从 Content-Type 为 multipart/form-data 的请求中获取数据的 [FromForm]
【不常用】从请求报文头中获取值的 [FromHeader]
返回值
返回特定类型:string ,Student 等
- 状态码是200,如果想返回其他的HTTP状态码类型,需要设置ResponseStatusCode
返回 IActionResult 类型:
- 常见返回类型为 BadRequestResult (400)、NotFoundResult (404) 和 OkObjectResult (200)
- 不含类型信息,无法推断类型
返回 ActionResult
<T>
类型【推荐】- 允许返回派生自 ActionResult 或返回 特定类型的类型
重定向:使用
Redirect``LocalRedirect``RedirectToAction
或RedirectToRoute