.NET 6开发TodoList应用实现系列背景
背景介绍
首先,我们需要了解一下TodoList应用是什么。TodoList,即待办事项清单,它是一种简单的应用程序,可以允许用户添加、编辑和删除待办事项,以及标记已完成的任务。这种应用程序是很多初学者从零开始编写Web应用程序时经常使用的。
在本系列教程中,我们将使用.NET 6框架来开发一款TodoList应用程序。.NET 6是微软发布的一款全新的开发框架,提供了一种跨平台的解决方案,可以用来开发各种类型的应用程序,包括Web应用程序、桌面应用程序、移动应用程序等。
架构介绍
本教程的架构采用以下技术:
- ASP.NET Core Web API,用于创建Web后端。
- Entity Framework Core,用于管理数据访问和数据库迁移等功能。
- Angular,用于创建Web前端。
开发环境
在开始开发之前,我们需要准备好开发环境。具体步骤如下:
- 安装Visual Studio 2022,可以从官网上下载安装包进行安装。
- 安装.NET 6 SDK,可以到官网上下载安装包进行安装。
- 安装Node.js和npm,可以到官网上下载安装包进行安装。
实现步骤
- 创建Web API项目
首先,我们需要创建一个新的Web API项目。在Visual Studio中选择新建项目 -> ASP.NET Core Web 应用程序,然后选择“Web API”模板。接下来,我们需要选择“目标框架”为.NET 6。
- 添加实体类和数据上下文
接下来,我们需要添加一个名为“TodoItem”的实体类,来表示待办事项。此外,我们还需要添加一个名为“TodoContext”的数据上下文类,用于管理TodoItem实体。
下面是TodoItem类的代码示例:
public class TodoItem
{
public long Id { get; set; }
public string Name { get; set; }
public bool IsComplete { get; set; }
}
下面是TodoContext类的代码示例:
public class TodoContext : DbContext
{
public TodoContext(DbContextOptions<TodoContext> options)
: base(options)
{
}
public DbSet<TodoItem> TodoItems { get; set; }
}
- 添加控制器
接下来,我们需要添加一个控制器类,用于处理Http请求并与数据上下文进行交互。此控制器类应该派生自Microsoft.AspNetCore.Mvc.ControllerBase类,并实现对应的Http方法。具体代码示例如下:
[ApiController]
[Route("[controller]")]
public class TodoController : ControllerBase
{
private readonly TodoContext _context;
public TodoController(TodoContext context)
{
_context = context;
}
[HttpGet]
public async Task<ActionResult<IEnumerable<TodoItem>>> GetTodoItems()
{
return await _context.TodoItems.ToListAsync();
}
[HttpGet("{id}")]
public async Task<ActionResult<TodoItem>> GetTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
return todoItem;
}
[HttpPost]
public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem item)
{
_context.TodoItems.Add(item);
await _context.SaveChangesAsync();
return CreatedAtAction(nameof(GetTodoItem), new { id = item.Id }, item);
}
[HttpPut("{id}")]
public async Task<IActionResult> PutTodoItem(long id, TodoItem item)
{
if (id != item.Id)
{
return BadRequest();
}
_context.Entry(item).State = EntityState.Modified;
await _context.SaveChangesAsync();
return NoContent();
}
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
_context.TodoItems.Remove(todoItem);
await _context.SaveChangesAsync();
return NoContent();
}
}
- 添加前端
接下来,我们需要添加一个前端页面,用于与后端进行交互。本教程中我们使用Angular框架来构建前端应用程序。下面是一些关键代码:
首先,我们需要定义TodoItem类:
export class TodoItem {
id: number;
name: string;
isComplete: boolean;
}
然后,我们需要创建一个TodoService类,用来发送Http请求:
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';
import { TodoItem } from './todo-item';
@Injectable({
providedIn: 'root'
})
export class TodoService {
private todoUrl = '/api/todo';
httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json' })
};
constructor(private http: HttpClient) { }
getTodoItems(): Observable<TodoItem[]> {
return this.http.get<TodoItem[]>(this.todoUrl);
}
addTodoItem(item: TodoItem): Observable<TodoItem> {
return this.http.post<TodoItem>(this.todoUrl, item, this.httpOptions);
}
updateTodoItem(item: TodoItem): Observable<any> {
const url = `${this.todoUrl}/${item.id}`;
return this.http.put(url, item, this.httpOptions);
}
deleteTodoItem(item: TodoItem | number): Observable<TodoItem> {
const id = typeof item === 'number' ? item : item.id;
const url = `${this.todoUrl}/${id}`;
return this.http.delete<TodoItem>(url, this.httpOptions);
}
}
最后,我们需要创建组件:
import { Component, OnInit } from '@angular/core';
import { TodoItem } from '../todo-item';
import { TodoService } from '../todo.service';
@Component({
selector: 'app-todo-list',
templateUrl: './todo-list.component.html',
styleUrls: ['./todo-list.component.css']
})
export class TodoListComponent implements OnInit {
todoItems: TodoItem[];
constructor(private todoService: TodoService) { }
ngOnInit() {
this.getTodoItems();
}
getTodoItems(): void {
this.todoService.getTodoItems()
.subscribe(todoItems => this.todoItems = todoItems);
}
add(name: string): void {
name = name.trim();
if (!name) { return; }
this.todoService.addTodoItem({ name } as TodoItem)
.subscribe(item => {
this.todoItems.push(item);
})
}
delete(item: TodoItem): void {
this.todoItems = this.todoItems.filter(i => i !== item);
this.todoService.deleteTodoItem(item).subscribe();
}
update(item: TodoItem): void {
this.todoService.updateTodoItem(item).subscribe();
}
}
- 添加数据迁移
最后,我们需要添加一个数据迁移,用于将实体类映射到数据库中。具体步骤如下:
- 在命令行中运行以下命令安装Entity Framework Core工具:
dotnet tool install --global dotnet-ef
- 在命令行中运行以下命令创建初始数据迁移:
dotnet ef migrations add InitialCreate
- 在命令行中运行以下命令将数据迁移应用到数据库中:
dotnet ef database update
- 运行应用程序
完成以上步骤后,现在就可以运行应用程序了。在Visual Studio中按下F5键,然后在浏览器中访问http://localhost:5001即可查看应用程序。
示例说明
以下是两个示例:
- 示例1:添加待办事项
在TodoList应用程序中,我们可以添加新的待办事项,具体步骤如下:
- 在应用程序页面中,点击“添加”按钮。
- 输入待办事项的名称,例如“完成作业”。
-
点击“保存”按钮,待办事项就会被添加到列表中。
-
示例2:完成待办事项
在TodoList应用程序中,我们可以标记已完成的待办事项,具体步骤如下:
- 在应用程序页面中,找到您想标记已完成的待办事项。
- 在该待办事项右侧,点击“完成”按钮。
- 待办事项就会被标记为已完成,并且页面上该待办事项的样式也会有所变化。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.NET 6开发TodoList应用实现系列背景 - Python技术站