# Blog-webapi **Repository Path**: crane-stack/blog-webapi ## Basic Information - **Project Name**: Blog-webapi - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-13 - **Last Updated**: 2025-06-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Blog-webapi 需要安装的包 ```C# dotnet new webapi -n BlogApp dotnet add package Pomelo.EntityFrameworkCore.Mysql dotnet add package Microsoft.EntityFrameworkCore.Desgin -v 8.0.6 //生成迁移文件 dotnet tool install --global dotnet-ef dotnet ef migrations add InitCreate //同步数据库 dotnet ef database update ``` 1.创建项目 ```c# dotnet new webapi -n BlogApp ``` 2.变成控制器模式 program.cs ```C# var builder = WebApplication.CreateBuilder(args); builder.Servies.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run(); ``` 3.新建控制器文件Controllers BlogsController.cs ```C# namespace BlogApp.Controllers; [ApiController] [Route("api/[controller]")] public class BlogsController : ControllerBase { [HttpGet] public IActionResult Get() { return Ok("") } } ``` 4.修改端口 launchSetting.json 5.修改http文件端口 ```http @url = http://localhost:5000 ### 列表 GET {{url}}/api/blogs HTTP/1.1 ``` 6.安装依赖包 ```c# dotnet add package Pomelo.EntityFrameworkCore.Mysql dotnet add package Microsoft.EntityFrameworkCore.Design -v 8.0.6 dotnet build ``` 7.创建Domain文件,定义实体 Blog.cs ```c# namespace BlogApp.Domain; public class Blog { public int Id { get; set; } public string BlogName { get; set; }= null!; public string BlogAuthor { get; set; }= null!; } ``` BlogDbContext.cs ```c# using Microsoft.EntityFrameworkCore; namespace BlogApp.Domain; public class BlogDbContext : DbContext { public DbSet Blogs { get; set; } public BlogDbContext (DbContextOptions options):base(options){} } ``` 8.连接数据库appsetting.json ```json "ConnectionStrings": { "mysql":"server=localhost;database=blog;uid=root;pwd=123456;" } ``` 9.注册容器program.cs ```c# //将数据库上下文注册到容器内 var conString = builder.Configuration.GetConnectionString("mysql"); builder.Services.AddDbContext(p => { p.UseMySql(conString, ServerVersion.AutoDetect(conString)); }); ``` 10.生成迁移文件 ```c# dotnet tool install --global dotnet-ef dotnet ef migrations add InitCreate //同步数据库 dotnet ef database update ``` 11.实现仓储接口Repository文件 IRepository.cs ```c# namespace BlogApp.Repository; public interface IRepository { Task> GetAllAsync(); Task GetByIdAsync(int id); Task CreateAsync(T entity); Task UpdateAsync(T entity); Task DeleteAsync(T entity); } ``` EfRepository.cs ```C# using BlogApp.Domain; using Microsoft.EntityFrameworkCore; namespace BlogApp.Repository; public class EfRepository : IRepository where T : class { private readonly BlogDbContext _db; private readonly DbSet _tb; public EfRepository(BlogDbContext db) { _db = db; _tb = _db.Set(); } public async Task CreateAsync(T entity) { var obj = (await _tb.AddAsync(entity)).Entity; await _db.SaveChangesAsync(); return obj; } public async Task DeleteAsync(T entity) { _tb.Remove(entity); await _db.SaveChangesAsync(); } public async Task> GetAllAsync() { var list = await _tb.ToListAsync(); return list; } public async Task GetByIdAsync(int id) { var obj = await _tb.FindAsync(id); return obj; } public async Task UpdateAsync(T entity) { _tb.Update(entity); await _db.SaveChangesAsync(); } } ``` 12.补充Program.cs ```c# using BlogApp.Domain; using BlogApp.Repository; using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(args); var conString = builder.Configuration.GetConnectionString("mysql"); builder.Services.AddDbContext(p => { p.UseMySql(conString, ServerVersion.AutoDetect(conString)); }); builder.Services.AddScoped(typeof(IRepository<>), typeof(EfRepository<>)); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run(); ``` 13.创建Dto文件夹 BlogCreateDto.cs ```C# namespace BlogApp.Dto; public record BlogCreateDto(string BlogName,string BlogAuthor); ``` 14.实现CRUD 在 BlogController.cs ```C# using BlogApp.Domain; using BlogApp.Dto; using BlogApp.Repository; using Microsoft.AspNetCore.Mvc; namespace BlogApp.Controllers; [ApiController] [Route("api/[controller]")] public class BlogsController : ControllerBase { private readonly IRepository _blogRep; public BlogsController(IRepository blogRep) { _blogRep = blogRep; } [HttpGet] public async Task Get() { var list = await _blogRep.GetAllAsync(); return Ok(new { Code = 1000, Msg = "获取列表成功", Data = list }); } [HttpPost] public async Task Post(BlogCreateDto blogCreateDto) { var blog = new Blog { BlogName = blogCreateDto.BlogName, BlogAuthor = blogCreateDto.BlogAuthor }; await _blogRep.CreateAsync(blog); return Ok(new { Code = 1000, Msg = "创建成功", Data = blog }); } [HttpPut("{id}")] public async Task Put(int id, BlogCreateDto blogCreateDto) { var blog = await _blogRep.GetByIdAsync(id); if (blog == null) { return Ok(new { Code = 1004, Msg = "未查询到", Data = "" }); } blog.BlogName = blogCreateDto.BlogName; blog.BlogAuthor = blogCreateDto.BlogAuthor; await _blogRep.UpdateAsync(blog); return Ok(new { Code = 1000, Msg = "修改成功", Data = blog }); } [HttpDelete("{id}")] public async Task Del(int id) { var blog = await _blogRep.GetByIdAsync(id); if (blog == null) { return Ok(new { Code = 1004, Msg = "未查询到", Data = "" }); } await _blogRep.DeleteAsync(blog); return Ok(new { Code = 1000, Msg = "删除成功", Data = blog }); } } ``` 13.完成http文件 ```http @url = http://localhost:5000 ### 列表 GET {{url}}/api/blogs HTTP/1.1 ### 新增 POST {{url}}/api/blogs HTTP/1.1 Content-Type: application/json { "BlogName":"webApi开发", "BlogAuthor":"老胡来也" } ### 修改 PUT {{url}}/api/blogs/2 HTTP/1.1 Content-Type: application/json { "BlogName":"webApi开发2", "BlogAuthor":"老胡来也2" } ### 删除 DELETE {{url}}/api/blogs/15 HTTP/1.1 ```