4-2.ASP.NET Core Web API 入門教學 - 取得指定資料

ASP.NET Core Web API 入門教學

這一節要來學習如何取得指定的資料,首先先看到預設幫我們產生的結構

[HttpGet("{id}")]
public string Get(int id)
{
    return "value";
}

這個結構就是用來取得指定資料的結構,我們一個一個來看

如果沒有忘記的話,之前有提到改變網址的寫法

[Route("api/[controller]")]

可以在最上方的Route標籤中打上你要的網址

而子方法中上面的[HttpGet("{id}")]也是可以改變網址,並且會跟Route中宣告的網址組合起來

如果是[HttpGet("getOne")],呼叫該方法的網址會是api/news/getOne

那{id}加上了{}又是什麼意思呢?網址會是api/news/這邊可以隨便打,只要符合這樣的結構都會進來這一個方法中

如果還記得RESTful API的風格,會知道第三層隨便打的地方,應該要打上你想取得的那個資料的主鍵id

那之後我們該如何取得第三層的值呢?如下

[HttpGet("{id}")]
public string Get(Guid id) //就是跟上方的命名一致,就可以取到對應的數值,不過我們的主鍵類型是Guid,所以這邊會改成要取得一個Guid id
{
    return "value";
}

接著我們就要開始撈出指定的資料了

[HttpGet("{id}")]
public News Get(Guid id)
{
    var result = _webContext.News.Find(id);

    return result;
}

但這樣顯然有個問題,就是我們應該要用上Dto,所以我們換個寫法

[HttpGet("{id}")]
public NewsDto Get(Guid id)
{
    var result = (from a in _webContext.News
                  where a.NewsId == id
                  select new NewsDto
                  {
                      Title = a.Title,
                      Content = a.Content,
                      NewsId = a.NewsId,
                      StartDateTime = a.StartDateTime,
                      EndDateTime = a.EndDateTime,
                      Click = a.Click
                  }).Single();  //只會撈出一筆的意思

    return result;
}

這樣執行看看能不能順利撈出一筆資料

如此就成功撈出了指定的資料,但這樣又有個小問題,當找不到指定的id時會出錯誤

問題就出在.Single(),這樣寫是說一定會撈出一筆,所以沒撈出東西的時候,程式就會出錯

所以我們再換個寫法

[HttpGet("{id}")]
public NewsDto Get(Guid id)
{
    var result = (from a in _webContext.News
                  where a.NewsId == id
                  select new NewsDto
                  {
                      Title = a.Title,
                      Content = a.Content,
                      NewsId = a.NewsId,
                      StartDateTime = a.StartDateTime,
                      EndDateTime = a.EndDateTime,
                      Click = a.Click
                  }).SingleOrDefault();  //這樣一樣撈出一筆,但撈不出來的時候就會變成null值

    return result;
}

這樣就算沒撈出東西也不會出錯誤了

那基本上如果是撈指定資料的api,通常會使用.SingleOrDefault()

.Single()的寫法會是用在,你認為這個地方一定要撈出東西,如果沒撈出東西代表你前面的程式有問題,因此你不想再繼續執行下去

就會用.Single(),來阻止繼續往下執行,這是一個應用的技巧,但這邊暫時用不到,算是順帶一提

 

範例檔:下載




Copyright © 凱哥寫程式 2022 | Powered by TalllKai ❤