ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【NetCore基础】1. WebApi 默认控制器说明

2021-10-30 01:33:32  阅读:272  来源: 互联网

标签:WebApi 控制器 HttpGet 构造方法 NetCore 参数 new 路由


默认控制器说明

  • 此文档是个人经验分享,希望能够帮助到有需要的朋友。
  • 如果存在错误,希望指出改正。
  • Gitee代码库(分支practice/01/框架生成的控制器): https://gitee.com/wosperry

如果是刚刚接触DotnetCore,什么都还不清楚的情况,可以先模仿项目自动生成的WeatherForecastController添加自己的控制器,先写一些Api接口尝试调用一下,其他的东西都可以先不看。哪怕你把所有逻辑都写在控制器(完全不建议),都是可以运行的。


路由

  1. 特性 [Route("")]
    1. 可以添加给 Controller 或者 方法
    2. 参数:
      1. 参数内容即是路由
      2. [controller] 控制器名
      3. [action] 方法名
        当控制器名为 XxxController 方法名为 Hahaha() 时,路由是 \Xxx\Hahaha
  2. Http方法的特性:[HttpGet()] [HttpPost()]
    1. 仅可以添加给 方法
    2. 参数内容即是路由

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;
            }
        */
    }
}

标签:WebApi,控制器,HttpGet,构造方法,NetCore,参数,new,路由
来源: https://www.cnblogs.com/wosperry/p/15484117.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有