C# webApi学习笔记

创建实体类,这里会自动生成构造函数,但是不会生成tostring

cs 复制代码
namespace WebApplication1.Products
{
    public class Product
    {
        public string productId { get; set; }
        public string productName { get; set; }
        public override string ToString()
        {
            return $"{nameof(productId)}: {productId}, {nameof(productName)}: {productName}";
        }
    }

}

创建连接数据库类

cs 复制代码
using Microsoft.EntityFrameworkCore;
using WebApplication1.Products;

namespace WebApplication1.Data
{
    public class AppDbContext : DbContext
    {
        // 构造函数,用于接收配置
        public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
        {
        }
        // DbSet 代表数据库中的一张表,后续的CRUD操作都基于它
        public DbSet<Product> Todos { get; set; }
    }
}

webApi 控制层,

复制代码
入口文件main方法中向依赖注入容器注册 AppDbContext
cs 复制代码
builder.Services.AddDbContext<AppDbContext>(options =>
    options.UseMySql(
        builder.Configuration.GetConnectionString("DefaultConnection"),
        new MySqlServerVersion(new Version(8, 0, 33))  // 根据你的 MySQL 版本调整
    ));

ToList();执行sql并存储到List

cs 复制代码
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using WebApplication1.Data;
using WebApplication1.Products;

namespace WebApplication1.TodosController
{
    [Route("api/")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        private readonly AppDbContext appdbs;
        // 构造函数,自动注入SQL连接的基本数据
        public ValuesController(AppDbContext appdb)
        {
            this.appdbs = appdb;
        }
        [Route("getProduct")]
        [HttpGet]
        public  List<Product> GetProduct([FromQuery]Product product)
        {
            Console.WriteLine(product);
            var todos =  appdbs.Todos.FromSqlRaw("select productId,productName From product where productId ={0}", "PRO258Q00004").ToList();
            return todos;
        }
    }
}

CRUD

cs 复制代码
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Reflection.Metadata.Ecma335;
using WebApplication1.Data;
using WebApplication1.Products;

namespace WebApplication1.TodosController
{
    [Route("api/")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        private readonly AppDbContext appdbs;
        // 构造函数,自动注入SQL连接的基本数据
        public ValuesController(AppDbContext appdb)
        {
            this.appdbs = appdb;
        }
        [Route("getProduct")]
        [HttpGet]
        public async Task<List<Product>> GetProduct([FromQuery]Product product)
        {
            var todos = await appdbs.Todos.FromSqlRaw("select productId,productName From product").ToListAsync();
            return todos;
        }
        [Route("add")]
        [HttpPost]
        public  IActionResult Insert([FromBody] Product product)
        {
            int todos =  appdbs.Database.ExecuteSqlRaw("insert into product(productName)values({0})", product.productName);
            return StatusCode(200,"插入成功");
        }
        [Route("update")]
        [HttpPut]
        public IActionResult Update([FromBody] Product product)
        {
            int rowsAffected = appdbs.Database.ExecuteSqlRaw(
                "UPDATE product SET productName = {0} WHERE productId = {1}",
                product.productName, product.productId
            );
            if (rowsAffected > 0) {
               return StatusCode(200,"修改成功");
            }
            return StatusCode(500,"修改失败") ;
        }

        [Route("delete")]
        [HttpDelete]
        public IActionResult Delete([FromQuery] string productId)
        {
            int rowsAffected = appdbs.Database.ExecuteSqlRaw(
                "DELETE FROM product WHERE productId = {0}",
                productId
            );
            return StatusCode(200,"删除成功");
        }
    }
}

所需要的依赖包,以及安装依赖

修改默认端口

cs 复制代码
"Kestrel": {
  "Endpoints": {
    "Https": {
      "Url": "https://*:9601"
    },
    "Http": {
      "Url": "http://*:9600"
    }
  }
}

接收参数注解

相关推荐
Piko6142 小时前
H3C IRF2 堆叠实战:打造高可靠核心交换网络
运维·网络·笔记
贪玩的蛋挞2 小时前
C#与闭包
开发语言·c#
茯苓gao4 小时前
嵌入式开发笔记:CANopen相关移位运算与通信协议术语详解
网络·嵌入式硬件·学习·信息与通信
dexi.Chi 攻城狮7 小时前
SQL层次查询语法
经验分享·笔记·sql
忧郁的紫菜7 小时前
基础实现:单篇 Markdown 转 Word
开发语言·c#·word
甜美的小天鹅7 小时前
Swifter C#之inline还是不inline,这是个问题
开发语言·c#
HERR_QQ8 小时前
强化学习的数学原理 学习笔记
人工智能·笔记·学习·自动驾驶
MartinYeung59 小时前
[论文学习]DP-Fusion:面向大语言模型的令牌级差分隐私推理-深度解析
人工智能·学习·语言模型
zwenqiyu9 小时前
非线性字符串数据结构串讲
数据结构·c++·学习·算法
MartinYeung510 小时前
[论文学习]SecureGate:通过令牌级门控学习何时安全地揭示PII-深度解析
学习·安全