【NetCore基礎】1. WebApi 默認控制器簡單說明


默認控制器說明

  • 此文檔是個人經驗分享,希望能夠幫助到有需要的朋友。
  • 如果存在錯誤,您就說一下,我改。
  • 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;
            }
        */
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM