---
# System prepended metadata

title: ASP.net Core 5 筆記
tags: [Asp.net Core]

---

###### tags: `Asp.net Core`
# ASP.net Core 5 筆記

## 套件 AutoMapper (此非官方套件,非必用)
由NuGet下載 AutoMapper (AutoMapper.Extensions.Microsoft.DependencyInjection)
建立類別後引用 using AutoMapper;
**class位置 繼承 ":Profile"**

## IActionResult 介面 、HTTP狀態碼
參考影片
- [凱哥寫程式 ASP.NET Core .NET 5 打造WebAPI入門教學(3_6) - 回應正確的HTTP狀態碼？](https://www.youtube.com/watch?v=GUjnwK0BsN4&list=PLneJIGUTIItsqHp_8AbKWb7gyWDZ6pQyz&index=16)

參考網址
- [ IActionResult ](https://docs.microsoft.com/zh-tw/dotnet/api/microsoft.aspnetcore.mvc.iactionresult?view=aspnetcore-5.0)
- [ HTTP狀態碼 ](https://docs.microsoft.com/zh-tw/dotnet/api/system.net.httpstatuscode?view=net-5.0)


## API
參考影片
### 凱哥寫程式ASP.NET Core .NET 5 Web API 入門教學
#### 4取得資料GET
- [影片連結](https://www.youtube.com/watch?v=O1bT1qNSoyw&list=PLneJIGUTIItsqHp_8AbKWb7gyWDZ6pQyz&index=16)

#### 製作API
- **在controller下新建API控制項**
1. get 撈取所有資料
``` csharp=1
[HttpGet]

public IEnumerable<TodoListSelectDto> Get(){
	var result = _todoContext.TodoLists.Include(a => a.UpdateEmployee).Include(a => a.InsertEmployee)
		.Select(a => new TodoListSelectDto
		{
			Enable = a.Enable,
			InsertEmployeeName = a.InsertEmployee.Name,
			InsertTime = a.InsertTime,
			Name = a.Name,
			Orders = a.Orders,
			TodoId = a.TodoId,
			UpdateEmployeeName = a.UpdateEmployee.Name,
			UpdateTime = a.UpdateTime
		});
	if (result == null || result.Count() == 0)
	{
		Response.StatusCode = 404;
	}
    return _iMapper.Map<IEnumerable<TodoListSelectDto>>(result);
}
```
**註釋**
第1行 宣告方法
第3行 IEnumerable & get 方法
第4-19行 撈取資料的程式碼搭配linq語法
第20行 回傳結果

2. get 撈取單一筆資料
``` csharp=1
[HttpGet("{id}")]

public TodoListSelectDto Get(Guid id){
	var result =( from a in _todoContext.TodoLists
		join b in _todoContext.Employees on a.InsertEmployeeId equals b.EmployeeId
		join c in _todoContext.Employees on a.UpdateEmployeeId equals c.EmployeeId
		where a.TodoId == id
		select new TodoListSelectDto
	    {
		Enable = a.Enable,
		InsertEmployeeName = b.Name,
		InsertTime = a.InsertTime,
		Name = a.Name,
		Orders = a.Orders,
		TodoId = a.TodoId,
		UpdateEmployeeName = c.Name,
		UpdateTime = a.UpdateTime
	    }).SingleOrDefault();
	return result;
}
```
**註釋**
第1行 宣告方法
第3行 Dto名稱 & get 方法 及 指定ID
第4-18行 撈取資料的程式碼搭配linq語法
第19行 回傳結果

#### 4_2關鍵字搜尋
-[影片連結](https://www.youtube.com/watch?v=jUEdwbRMNYE&list=PLneJIGUTIItsqHp_8AbKWb7gyWDZ6pQyz&index=17)

``` csharp=1
#region Get 關鍵字搜尋
[HttpGet]
public IEnumerable<TodoListSelectDto> Get(string name, bool? enable, DateTime? UpdateTime)
    {
	var result = _todoContext.TodoLists.Include(a => a.UpdateEmployee).Include(a => a.InsertEmployee).Select(a => new TodoListSelectDto
		{
		    Enable = a.Enable,
			InsertEmployeeName = a.InsertEmployee.Name,
			InsertTime = a.InsertTime,
			Name = a.Name,
			Orders = a.Orders,
			TodoId = a.TodoId,
			UpdateEmployeeName = a.UpdateEmployee.Name,
			UpdateTime = a.UpdateTime
		});

    	if (!string.IsNullOrWhiteSpace(name))
	{
		result = result.Where(a => a.Name.Contains(name));
	}

	if (enable != null)
	{
		result = result.Where(a => a.Enable == enable);
	}

	if (UpdateTime != null)
	{
		result = result.Where(a => a.InsertTime.Date == UpdateTime);
	}

	return result;
}
#endregion
```
**註釋**
第2行 宣告方法
第3行 Dto名稱 & get 方法 及 配置參數
第5-30行 撈取資料的程式碼搭配linq語法
第32行 回傳結果

- #補充 
在參數後面加上問號代表此參數可接受null值
  - [參考連結](https://dotblogs.com.tw/charleen/2017/12/26/100359)