VUE入门一段时间了,想要了解一些先进的后端技术,以便于快速流畅的实现一些小型系统。技术栈先划定为ASP .NET CORE的WEB API作为后端,数据库PostgreSQL,前端主要为VUE全家桶 + element-ui。总体比较适合全栈新手。本文为第一篇,当前内容仍在逐步修改更新。
微软官方文档,和一个清晰的code first代码例子
以及一个异常简单清晰的EntityFramework6 快速入门教程。
参考前2篇文章快速实现通过code创建数据库表,连接数据库并实现webapi的增查删改
下载dotnet core sdk 2.1.5 https://www.microsoft.com/net/download
在 Visual Studio 中执行以下步骤:
从“文件”菜单中选择“新建” > “项目”。
选择“ASP.NET Core Web 应用程序”模板。 将项目命名为 TodoApi,然后单击“确定”。
在“新建 ASP.NET Core Web 应用程序 - TodoApi”对话框中,选择 ASP.NET Core 版本。 选择“API”模板,然后单击“确定”。 请不要选择“启用 Docker 支持”。
在解决方案资源管理器中,右键单击项目。 选择“添加” > “新建文件夹”。 将文件夹命名为“Models”。
在解决方案资源管理器中右键单击“模型”文件夹,然后选择“添加” > “类”。 将类命名为 TodoItem,然后单击“添加”。
使用以下代码更新 TodoItem 类:
using System;
using System.ComponentModel.DataAnnotations;
namespace TodoApi.Models
{
public class TodoItem
{
///
/// 匹配编号
///
[Key]
public Guid Gid { get; set; }
///
/// 上传文件名
///
public string UploadFileName { get; set; }
///
/// 上传文件路径
///
public string UploadFilePath { get; set; }
///
/// 创建时间
///
public DateTime CreateTime { get; set; }
///
/// 状态 0:匹配中 1:匹配完成未下载 2:匹配完成已下载
///
public int Status { get; set; }
///
/// 下载文件名
///
public string DownloadFileName { get; set; }
///
/// 下载文件路径
///
public string DownloadFilePath { get; set; }
///
/// 下载时间
///
public DateTime? DownloadTime { get; set; }
///
/// 下载次数
///
public int DownLoadCount { get; set; }
}
}
VS 工具-Nuget包管理器-包管理器控制台 打开PM输入以下命令添加依赖包
Install-Package Npgsql.EntityFrameworkCore.PostgreSQL
Install-Package Npgsql.EntityFrameworkCore.PostgreSQL.Design
Install-Package Microsoft.EntityFrameworkCore.Tools
并修改ip,数据库名和用户密码:
注意:这里的连接字符串默认会使用Pooling=true; 使用中连接池上限100,释放不掉会报错。
临时解决办法是字符串使用:
"PostgreSql": "User ID=postgres;Password=postgres;Host=localhost;Port=5432;Database=mydatabase;Pooling=false;"
{
"ConnectionStrings": {
"PostgreSql": "User ID=postgres;Password=postgres;Host=localhost;Port=5432;Database=mydatabase"
},
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Warning"
}
},
"Console": {
"LogLevel": {
"Default": "Warning"
}
}
}
}
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System.IO;
using TodoApi.Models;
using Microsoft.Extensions.Configuration;//引入Configuration
namespace TodoApi
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddDbContext(option => option.UseNpgsql(Configuration.GetConnectionString("PostgreSql")));
}
public void Configure(IApplicationBuilder app)
{
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseMvc();
}
}
}
数据库上下文是为给定数据模型协调实体框架功能的主类。 此类由Microsoft.EntityFrameworkCore.DbContext 类派生而来。在解决方案资源管理器中右键单击“模型”文件夹,然后选择“添加” > “类”。 将类命名为 TodoContext,然后单击“添加”。
将该类替换为以下代码:
using Microsoft.EntityFrameworkCore;
namespace TodoApi.Models{
public class TodoContext :DbContext
{
public TodoContext(DbContextOptions options):base(options){
}
public DbSet TodoItems {get;set;}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
}
Add-Migration TodoItem
Update-Database
dotnet ef migrations add TodoItem
dotnet ef database update
命令全部DONE的话,数据库表已建立完成
在解决方案资源管理器中,右键单击“Controllers”文件夹。 选择 添加 > 新建项。 在“添加新项”对话框中,选择“API 控制器类”模板。 将类命名为 TodoController,然后单击“添加”。修改内容为:
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using TodoApi.Models;
using System;
namespace TodoApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class TodoController : ControllerBase
{
private readonly TodoContext _context;
public TodoController(TodoContext context)
{
_context = context;
if (_context.TodoItems.Count() == 0)
{
// Create a new TodoItem if collection is empty,
// which means you can't delete all TodoItems.
_context.TodoItems.Add(new TodoItem { UploadFileName = "Item1" });
_context.SaveChanges();
}
}
[HttpGet]
public ActionResult> GetAll()
{
return _context.TodoItems.ToList();
}
[HttpGet("{gid}", Name = "GetTodo")]
public ActionResult GetById(Guid gid)
{
var item = _context.TodoItems.Find(gid);
if (item == null)
{
return NotFound();
}
return item;
}
}
}
在VS中Ctrl+F5运行,浏览器输入:
https://localhost:44315/api/todo
TodoController返回GetAll的结果json
复制其中的guid如‘12c82bb4-207b-4e31-be9a-1aba4a5b8222’
浏览器请求https://localhost:44315/api/todo/12c82bb4-207b-4e31-be9a-1aba4a5b8222
获取指定Guid的对象。
get api示例到此结束。
实现创建,在TodoController下继续增加:
[HttpPost]
public IActionResult Create(TodoItem item)
{
_context.TodoItems.Add(item);
_context.SaveChanges();
return CreatedAtRoute("GetTodo", new { gid = item.Gid }, item);
}
关掉之前调试的网页重新Ctrl+F5,然后postman中发一条post,创建成功
继续增加修改和删除代码
[HttpPut("{gid}")]
public IActionResult Update(Guid gid, TodoItem item)
{
var todo = _context.TodoItems.Find(gid);
if (todo == null)
{
return NotFound();
}
todo.UploadFileName = item.UploadFileName;
todo.UploadFilePath = item.UploadFilePath;
todo.CreateTime = item.CreateTime;
todo.Status = item.Status;
todo.DownloadFileName = item.DownloadFileName;
todo.DownloadFilePath = item.DownloadFilePath;
todo.DownloadTime = item.DownloadTime;
todo.DownLoadCount = item.DownLoadCount;
_context.TodoItems.Update(todo);
_context.SaveChanges();
return NoContent();
}
[HttpDelete("{gid}")]
public IActionResult Delete(Guid gid)
{
var todo = _context.TodoItems.Find(gid);
if (todo == null)
{
return NotFound();
}
_context.TodoItems.Remove(todo);
_context.SaveChanges();
return NoContent();
}