- A+
所属分类:.NET技术
默认控制器说明
- 此文档是个人经验分享,希望能够帮助到有需要的朋友。
- 如果存在错误,希望指出改正。
- Gitee代码库(分支
practice/01/框架生成的控制器
): https://gitee.com/wosperry - 微软文档
如果是刚刚接触DotnetCore,什么都还不清楚的情况,可以先模仿项目自动生成的WeatherForecastController添加自己的控制器,先写一些Api接口尝试调用一下,其他的东西都可以先不看。哪怕你把所有逻辑都写在控制器(完全不建议),都是可以运行的。
路由
- 特性
[Route("")]
- 可以添加给
Controller
或者方法
- 参数:
- 参数内容即是路由
[controller]
控制器名[action]
方法名
当控制器名为XxxController
方法名为Hahaha()
时,路由是XxxHahaha
- 可以添加给
- Http方法的特性:
[HttpGet()]
[HttpPost()]
等- 仅可以添加给
方法
- 参数内容即是路由
- 仅可以添加给
WebApi框架项目默认控制器说明(项目生成文件)
// Api控制器特性:默认HttpPost时,参数从Body获取,等价于不添加时在Api参数标识[FromBody]特性 [ApiController] // 表示一级路由是 WeatherForecast // 一般不直接使用 [controller] [Route("[controller]")] // 控制器基类 ControllerBase,继承此类后会在程序运行时被框架发现,提供一些控制器常用方法 // 如 BadRequest(string message), Ok(string message)等,具体可F12查看 public class WeatherForecastController: ControllerBase { // 说明:默认项目只是个例子,可以参考,不想看也没关系 // 这是一个字段:静态 私有 只读,字符串数组,用于后面随机展示 private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; // 这是一个字段:一个类型参数为当前类型的一个日志服务,由构造方法的注入得到实例 private readonly ILogger<WeatherForecastController> _logger; // 这个类的构造方法 // 注入说明: // 1. 此构造方法不在任何地方被手动调用 // 2. 类的构造方法由框架自动发现,并使用最多参数的构造方法进行构造,在构造前会递归构造出所有参数的实例 // 3. 参数可以是非常多,需要用到什么服务,就在参数添加 // 具体可搜索 IOC控制反转、DI依赖注入 public WeatherForecastController(ILogger<WeatherForecastController> logger) { // 由于作用域关系,构造函数结束后,会被系统GC回收 // 保存到类的字段中,即可在类的整个生命周期中被保留使用 _logger = logger; } // Http方法,标识了HttpGet特性时,只接收HttpGet请求,如果Http方法不匹配则不接受 // HttpGet特性可以接受一个字符串参数,此参数作用与[Route()]相同,会被认为是二级路由 [HttpGet] // 以下是一个普通方法,返回的结果会被自动转成Json格式给到接口消费者 public IEnumerable<WeatherForecast> Get() { // 一个随机数类 var rng = new Random(); // Enumerable.Range(1, 5) :从1开始,获取5个整数(参数介绍可F12) // .Select() :投影方法,等同于写了一个foreach方法拼接 List<WeatherForecast> 类型结果 // 不同的是Select是一个迭代器,性能略好于自行遍历,返回值类型为IEnumerable。 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(); // 上述内容执行结果简单写法: /* public IEnumerable<WeatherForecast> GetWeatherForecasts() { var random = new Random(); var list = new List<WeatherForecast>(); for (int index = 1;index <= 5; index++) { list.Add(new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = random.Next(-20, 55), Summary = Summaries[random.Next(Summaries.Length)] }); } return list; } */ } }