.net core 6.0 web api 爬坑日记

这篇具有很好参考价值的文章主要介绍了.net core 6.0 web api 爬坑日记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

EFCore 的使用和配置

  • 本人以前做前端开发的,就是html,js,css,vue,react那些
  • 此前没接触过.net 甚至没接触过C# , 若哪里不对或有缺陷欢迎指出,以便改正! ^_^
  • 这是当前所在公司的一个小项目 , 虽然这个项目不大, 但是奈何我又喜欢新版本,所以直接用的.net core 6.0
  • 而且多数问题百度, 谷歌 都只有.net 3.x版本的回答
  • 本项目的前端是用的Blazor
  • 俗话说: 好记性不如烂笔头 , 自己做个笔记 , 能帮到其他朋友更好!

使用VS2022 新建webapi项目(不做赘述)

本项目地址

配置数据库

  • 添加包:
  • Microsoft.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.Design
  • Microsoft.EntityFrameworkCore.Tools
  • Pomelo.EntityFrameworkCore.MySql(Microsoft.EntityFrameworkCore.Mysql不支持最新版dot net)
  1. appsettings.json中 添加配置代码: 例
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "DefaultConnection": "server=localhost;database=wcsb_black_list;user id=root;password=toor"
  }

}
  1. 依赖注入:
// 连接数据库
    builder.Services.AddDbContext<BlackListContext>(options =>
        options.UseMySql(builder.Configuration.GetConnectionString("DefaultConnection"),ServerVersion.Parse("8.0.26")));
    
    
    // 可访问和使用静态文件
    app.UseStaticFiles();
  1. 创建Models文件夹并创建数据Model

namespace WCSB_Black_LIst_API.Models
{
    public class BlackList
    {
        [Key] public int Id { set; get; }
        [DisplayName("姓名")] public string Name { set; get ; }
        [DisplayName("身份证号")] public string IdCard { set; get ; }
        [DisplayName("户籍地")] public string? Address { set; get ; }
    }
}
  1. 创建数据上下文
using Microsoft.EntityFrameworkCore;
namespace WCSB_Black_LIst_API.Models
{
    public class BlackListContext:DbContext
    {
        public BlackListContext(DbContextOptions<BlackListContext> options) : base(options)
        {
        }
        
        public DbSet<BlackList> BlackList { get; set; }
        // 如果多个Model 例: 
        public DbSet<Other> Others { get; set; }
    }
}
  1. 使用EFCore 的数据迁移(根据之前创建的Model和Context自动创建数据库)
  • 在程序包管理控制台(左下角, 或者工具->NuGet包管理器->程序包管理控制台) 输入 get-help entityframework 查看帮助
  • 常用的命令: add-migration 名 添加一个新的迁移
  • script-migration 生成迁移脚本
  • update-database 更新数据库
  • 至此 准备工作和表就建好了

数据的操作

  • 在Controller文件夹中创建相应的控制器
  • 如: BlackListController.cs
  • 控制器继承于 ControllerBase

[ApiController] 启用固定行为,使生成 Web API 更加容易。 一些行为包括参数源推理、将属性路由作为一项要求以及模型验证错误处理增强功能。
[Route] 定义路由模式 [controller]。 [controller] 令牌将替换为控制器的名称(不区分大小写,无 Controller 后缀)。

    using Microsoft.AspNetCore.Mvc;
    using WCSB_Black_LIst_API.Models;
    namespace WCSB_Black_LIst_API.Controllers
    {
        // [Route("api/[controller]")]
        [Produces("application/json")]
        [Consumes("application/json", "multipart/form-data")]//此处为新增 接受form表单数据
        [Route("api/")]
        [ApiController]
        public class BlackListController : ControllerBase
        {
            private readonly BlackListContext context;
            public BlackListController(BlackListContext context)
            {
                this.context = context;
            }
        }
    }

var data = new BlackList() { IdCard = idCard, Name = name, Address = address };
context.BlackList.Add(data); // 添加操作
context.SaveChanges(); // 保存更改

    var data = context.BlackList.Where(_ => _.Id == id).FirstOrDefault(); // 通过条件筛选并选取第一个数据
    context.BlackList.Remove(data); // 删除操作
    context.SaveChanges(); // 保存更改

    var data = context.BlackList.Where(_ => _.Id == id).FirstOrDefault(); // 通过条件筛选选取第一个数据
    data.Name = name; // 修改name值
    data.Address = address; // 修改address值
    data.IdCard = idCard; // 修改idCard值
    context.SaveChanges(); // 保存更改

  • 模糊查询
   // 模糊查询
   // str.Contains(keyword) 检查str中是否包含keyword字符串
   var s = context.BlackList.Where(_ => _.Name.Contains(keyword) || _.IdCard.Contains(keyword) || _.Address.Contains(keyword));
   // 获取总数据量 
   var total = s.Select(_ => _.Id).Distinct().Count();
   // 分页
   // Skip(从第多少条数据开始/忽略之前多少条数据)
   // Task(从开始处查询多少条数据)
   var res = s.Skip(limit * (page-1)).Take(limit);
  • 获取全部数据
   var bl = context.BlackList;
   // 查数量
   var total = bl.Select(_ => _.Id).Distinct().Count();
   // 获取全部数据 
   // bl.ToListAsync();
   // 分页查询
   var res =  bl.Skip(limit * (page-1)).Take(limit);

增删改查的完整示例(只示例两个典型,其他类似)

       // 搜索
       [HttpGet("Search")]
       public async Task<object> Search(string keyword,int page = 1, int limit = 20)
       {
           try
           {
               var s = context.BlackList.Where(_ => _.Name.Contains(keyword) || _.IdCard.Contains(keyword) || _.Address.Contains(keyword));
               var total = s.Select(_ => _.Id).Distinct().Count();
               var res = s.Skip(limit * (page-1)).Take(limit);
               return new {code = 200 , data =new {
                   list = res,
                   total
               }, message="查询成功"};
           }
           catch (Exception e)
           {
               return new {code = 400,message=e.Message};  
           }
       }
       // 更新/添加 (取决于有没有id) 参数为对象的方式在前端为JSON传参方式(content-type:application/json)
       [HttpPost("UpdatePeople")]
       public async Task<object> UpdatePeople(BlackList blackList )
        {
           try
           {
               int id = blackList.Id;
               string name = blackList.Name;
               string? address = blackList.Address;
               string idCard = blackList.IdCard;
               if (id == 0)
               {
                   var data = new BlackList() { IdCard = idCard, Name = name, Address = address };
                   context.BlackList.Add(data);
               }
               else
               {
                   var data = context.BlackList.Where(_ => _.Id == id).FirstOrDefault();
                   data.Name = name;
                   data.Address = address;
                   data.IdCard = idCard;
               }
               context.SaveChanges();
               return new { code = 200, message = (id == 0 ? "新增" : "修改") + "成功" };
           }
           catch (Exception e)
           {
                return new { code = 500, message = e.Message };
           }
       }

Excel导入数据的操作

  • 这里使用的是Npoi.Mapper库 在NuGet中可找到安装
  • Excel示例:
姓名 证件号码 户籍地
张三 513002221152151201 四川省达州市大竹县
李四 51300222115215120X 四川省达州市通川区
王五 513002221152154561 四川省达州市达川区
  • 以下是代码
   // excel的结构
    private class BlackListExcel {
       public string? Name { set; get; }
       public string? IdCard { set; get; }
       public string? Address { set; get; }
   }
   [HttpPost("UploadExcel")]
   public async Task<object> UploadExcel(IFormCollection files) 
   {
       try {
           // 遍历文件的数量
           foreach (var file in files.Files)
           {
               // 文件名
               string fileName = file.FileName;
               // 获取文件的后缀名
               string[] suffixArr = fileName.Split(".");
               string suffix = suffixArr[suffixArr.Length-1];
               // 限制后缀名
               if(suffix != "xlsx" && suffix != "xls" && suffix != "xlsm"&& suffix != "xltx"&& suffix != "et"&& suffix != "ett")
               {
                   throw new Exception($"[Error]文件格式不正确: .{suffix}不是有效的Excel文件格式!");
               }
               // 根据文件的数据流创建mapper对象
               var mapper = new Mapper(file.OpenReadStream());
               // 根据excel的标题映射数据
               var map = mapper.Map<BlackListExcel>("姓名", o => o.Name).Map<BlackListExcel>("证件号码", o => o.IdCard).Map<BlackListExcel>("户籍地", o => o.Address);
               // 获取映射后的数据列表
               var data = map.Take<BlackListExcel>("sheet1").Select(_ => _.Value);
               // 遍历数据列表
               foreach (var item in data)
               {
                   // 创建新的数据
                   var black = new BlackList() {IdCard = item.IdCard, Name = item.Name, Address = item.Address };
                   // 添加到临时blacklist上下文中 , 不要每一条都保存更改, 不止耗时还耗费资源
                   context.BlackList.Add(black);
               }
               // 最后保存更改
               context.SaveChanges();
           }
           return new { code = 200, message = "导入成功" };
       }catch(Exception e)
       {
           return new { code = 500, message = e.Message };
       } 
   }

Cors跨域

[官方文档] 在 ASP.NET CORE 中 (CORS) 跨 ASP.NET Core文章来源地址https://www.toymoban.com/news/detail-444663.html

  • 注入Cors服务
 builder.Services.AddCors(options =>
 {
    // 所有人都能跨域访问
    options.AddPolicy(name:"getData", builder =>
    {
        builder.AllowAnyMethod().AllowAnyHeader().SetIsOriginAllowed(_=>true); 
    });
    // 指定域名可跨域访问
    options.AddPolicy(name:"Policy", builder =>
    {
        builder.AllowAnyMethod().AllowAnyHeader().WithOrigins("http://example.com",
                                              "http://www.contoso.com"); 
    });
 });
 
 
 
 // 使用  必须在app.app.UseRouting();之后 且在app.UseAuthorization();之前;
 app.UseCors();
 // 或者全局使用
 app.UseCors("Policy");
  • 用法 我这里在controller中使用
[HttpGet("Search"), EnableCors("getData")] 
public async Task<object> Search(string name , string idCard)
{ 
    try 
    {
        var data = context.BlackList.Where(_ => _.IdCard == idCard && _.Name == name).FirstOrDefault();
        return new { code = 200, data, message = "查询成功" };
    }
    catch (Exception e)
    {
        return new { code = 500, message = e.Message };
    }
     
}

到了这里,关于.net core 6.0 web api 爬坑日记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • asp.net core EFCore 属性配置与DbContext

    Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术。用于程序中的class类和数据库中的表互相之间建立映射关系。在学习过程中,EFCore中的属性配置显的尤为重要它是学习好asp.net core的基础是配置数据库表结构的重要基石。本篇内容为

    2024年02月07日
    浏览(34)
  • .Net6 Web Core API 配置 Autofac 封装 --- 依赖注入

    目录 一、NuGet 包导入 二、Autofac 封装类 三、Autofac 使用 四、案例测试 下列封装 采取 程序集注入方法 , 单个依赖注入, 也适用, 可依赖注入的地方配置 Autofac Autofac.Extensions.DependencyInjection Autofac.Extras.DynamicProxy    

    2024年02月14日
    浏览(29)
  • .net core 多项目中使用EFCore

    类库一级项目使用.net core 3.1 框架 其中EFCore是和数据库交互的 MultiCore 注入EFCore中的DBContext与数据库交互 主要为了解决多项目中数据库迁移失败问题 EFCore 工程安装如下包 MultiCore 安装如下 EFCore person.cs personconfig.cs EFDbcontext.cs EFDbContextFac .cs 这是关键,但是这仅仅在开发环境下

    2024年02月07日
    浏览(75)
  • ASP.NET Core Web API入门之三:使用EF Core

    一般来讲我们做项目都会用实体类跟数据库实体进行关系对应,这样的好处方便我们维护、增删改查,并且可以减少SQL的编写,从而统一风格,那么 Entity Framework Core 就是很不错的ORM框架。 1、跨数据库支持能力强大,只需修改配置就可以轻松实现数据库切换。 2、提升了开发效

    2024年02月10日
    浏览(38)
  • ASP.NET Core Web API入门之二:Swagger详细使用&路由设置

    本篇文章是Swagger的详细使用,续上篇ASP.NET Core Web API入门之一:创建新项目。 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务的接口文档。 根据在代码中使用自定义的注解来生成接口文档,这个在前后端分离的项目中很重要。这样做的

    2024年02月15日
    浏览(32)
  • 从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(二)

    传送门:从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(一) 我们虽然可以在输入 /swagger 后顺利的访问 Swagger UI 页面,但是我们发现每次运行项目都会默认访问 /weatherforecast 这个接口,想要将启动页设为 /swagger (或者其他页面)就需要用到配置文件 launchSettings.

    2023年04月12日
    浏览(34)
  • 从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(一)

    1、双击打开VS2022。 2、单击“创建新项目”,如下图。 3、选择“ASP.NET Core Web API”类型,然后单击“下一步”,如下图。 4、“项目名称”此处填写为“AllTestDemo”;“位置”此处放在E盘根目录;“解决方案名称”此处默认与“项目名称”保持一致;不勾选“将解决方案和项

    2023年04月11日
    浏览(49)
  • 使用asp.net core web api创建web后台,并连接和使用Sql Server数据库

    前言:因为要写一个安卓端app,实现从服务器中获取电影数据,所以需要搭建服务端代码,之前学过C#,所以想用C#实现服务器段代码用于测试,本文使用C#语言,使用asp.net core web api组件搭建服务器端,并访问sql server 数据库。 一、安装Visual studio 2022 社区版,并安装ASP.NET和

    2024年02月14日
    浏览(36)
  • 在 ASP.NET Core Web API 中使用异常筛选器捕获和统一处理异常

    在 ASP.NET Core Web API 中,异常筛选器(Exception Filter)是一种用于处理发生在 Web API 控制器或管道中的异常的机制。 异常筛选器可以捕获和处理应用程序中发生的异常,当系统中出现未经处理的异常的时候,异常筛选器就会执行,我们可以在异常筛选器中对异常进行处理,例如

    2024年01月19日
    浏览(27)
  • NET Core 6.0 webapi 简单使用+连接数据库

    ASP.NET core NET core 6.0 如何使用 在 Program.cs里面 添加对应注释 效果: Microsoft.EntityFrameworkCore.Sqlite Microsoft.EntityFrameworkCore.Sqlite.Core Newtonsoft.Json:用于Json格式转换 添加测试Api Tips:这里用到ORM查询语法 EntityFramework EF 常用增删改查语句 运行结果

    2024年02月09日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包