.Net WebAPI(一)
文章目录
- 项目地址
- 一、WebAPI基础
- 1. 项目初始化
- 1.1 创建简单的API
- 1.1.1 get请求
- 1.1.2 post请求
- 1.1.3 put请求
- 1.1.4 Delete请求
- 1.2 webapi的流程
- 2.Controllers
- 2.1 创建一个shirts的Controller
- 3. Routing
- 3.1 使用和创建MapControllers
- 3.2 使用Routing的模板语言
- 4. Mould Binding
- 4.1 指定数据的来源
- 4.1.1 给Request请求添加
- 1. FromRoute
- 2. FromQuery
- 3. FromHeader
- 4.1.2 给Post请求添加
- 1. FromBody
- 2. FromForm
- 5. Mould Validation
- 5.1 添加Model Validation
- 5.2 添加自定义的Validation
- 6. WebApi Return Types
- 6.1 直接返回对象
- 6.2 返回多类型
- 7. Action filter
- 7.1 创建filter
项目地址
- 教程作者:
- 教程地址:
- 代码仓库地址:
- 所用到的框架和插件:
webapi
一、WebAPI基础
1. 项目初始化
- 创建一个一个项目文件夹,并且在控制台输入
dotnew webapi -n Restaurants.API --noopenapi -controllers
- 但是此时的项目是没有sln文件的,创建sln文件,但是这时候打开vs显示的是空项目
dotnet new sln
- 将项目添加到vs里
dotnet sln add ./Restaurants.API
1.1 创建简单的API
- 在program.cs里使用routing中间件配置路由
1.1.1 get请求
- 获取所有的shirts
app.MapGet("/shirts", () =>
{return "Reading all the shirts";
});
- 根据ID获取一个
//2.get shirt by id
app.MapGet("/shirts/{id}", (int id) =>
{return $"Reading shirt with ID: {id}";
});
1.1.2 post请求
app.MapPost("/shirts", () =>
{return "Creating a new shirt.";
});
1.1.3 put请求
更新
app.MapPut("/shirts/{id}", (int id) =>
{return $"Updating shirt with ID: {id}";
});
1.1.4 Delete请求
删除
app.MapDelete("/shirts/{id}", (int id) =>
{return $"Deleting shirt with ID: {id}";
});
1.2 webapi的流程
2.Controllers
2.1 创建一个shirts的Controller
- 创建
Controllers文件夹
,在该文件夹下创建ShirtsController.cs
文件
using Microsoft.AspNetCore.Mvc;namespace WebAPIDemo.Controllers
{[ApiController]public class ShirtsController : ControllerBase{public string GetShirts(){return "Reading all the shirts"; }public string GetShirtById(int id){return $"Reading shirt with ID: {id}";}public string CreateShirt(){return "Creating a new shirt.";}public string UpdateShirt() {return "Updating shirt with ID: {id}";}public string DeleteShirt(int id){return $"Deleting shirt with ID: {id}";}}
}
3. Routing
3.1 使用和创建MapControllers
- 在
Program.cs
里添加rout的中间件
- 在Controller里,直接使用特性标记routing
using Microsoft.AspNetCore.Mvc;namespace WebAPIDemo.Controllers
{[ApiController]public class ShirtsController : ControllerBase{[HttpGet("/shirts")]public string GetShirts(){return "Reading all the shirts"; }[HttpGet("/shirts/{id}")]public string GetShirtById(int id){return $"Reading shirt with ID: {id}";}[HttpPost("/shirts")]public string CreateShirt(){return "Creating a new shirt.";}[HttpPut("/shirts/{id}")]public string UpdateShirt() {return "Updating shirt with ID: {id}";}[HttpDelete("/shirts/{id}")]public string DeleteShirt(int id){return $"Deleting shirt with ID: {id}";}}
}
3.2 使用Routing的模板语言
- 在上面我们给每个Controller都使用一个路由,这样代码冗余,我们可以使用模板来指定rout;
- 这样我们可以直接用过
https://localhost:7232/shirts
进行访问shirts
就是控制器的名称
- 如果我们想通过
https://localhost:7232/api/shirts
进行访问的话,修改模板routing
4. Mould Binding
将Http request和 Controller里的 parameter绑定起来
4.1 指定数据的来源
4.1.1 给Request请求添加
1. FromRoute
- 指定这个参数必须是从
https://localhost:7232/api/shirts/2/red
从路由里来,如果不是,则报错
[HttpGet("{id}/{color}")]
public string GetShirtById(int id,[FromRoute]string color)
{return $"Reading shirt with ID: {id},color is {color}";
}
2. FromQuery
- 必须通过
QueryString
的形式提供:https://localhost:7232/api/shirts/2?color=red
[HttpGet("{id}/{color}")]public string GetShirtById(int id,[FromQuery]string color){return $"Reading shirt with ID: {id},color is {color}";}
3. FromHeader
- 必须通过请求头来传递,且Key是Name
[HttpGet("{id}/{color}")]
public string GetShirtById(int id,[FromHeader(Name="color")]string color)
{return $"Reading shirt with ID: {id},color is {color}";
}
4.1.2 给Post请求添加
- 在webapp里创建一个新的文件夹
Models
,并且添加一个Shirts,cs
类
namespace WebAPIDemo.Models
{public class Shirt{public int ShirtId { get; set; }public string? Brand { get; set; } public string? Color { get; set; }public int Size { get; set; }public string? Gender { get; set; }public double Price { get; set; }}
}
1. FromBody
- 从请求体里来
[HttpPost]
public string CreateShirt([FromBody]Shirt shirt)
{return "Creating a new shirt.";
}
2. FromForm
- 通过表格形式传递
[HttpPost]
public string CreateShirt([FromForm]Shirt shirt)
{return "Creating a new shirt.";
}
5. Mould Validation
5.1 添加Model Validation
- 在
Models/Shirts.cs
类里添加验证,如果没有给出必须的参数,请求会报错400
using System.ComponentModel.DataAnnotations;namespace WebAPIDemo.Models
{public class Shirt{[Required]public int ShirtId { get; set; }[Required]public string? Brand { get; set; } public string? Color { get; set; }public int Size { get; set; }[Required]public string? Gender { get; set; }public double Price { get; set; }}
}
5.2 添加自定义的Validation
- 在
Models文件夹
里,添加Validations文件夹
,并且添加文件Shirt_EnsureCorrectSizingAttribute.cs
using System.ComponentModel.DataAnnotations;
using WebAPIDemo.Models;namespace WebApp.Models.Validations
{public class Shirt_EnsureCorrectSizingAttribute : ValidationAttribute{protected override ValidationResult? IsValid(object? value, ValidationContext validationContext){var shirt = validationContext.ObjectInstance as Shirt;if (shirt != null && !string.IsNullOrWhiteSpace(shirt.Gender)){if (shirt.Gender.Equals("men", StringComparison.OrdinalIgnoreCase) && shirt.Size < 8){return new ValidationResult("For men's shirts, the size has to be greater or equal to 8.");}else if (shirt.Gender.Equals("women", StringComparison.OrdinalIgnoreCase) && shirt.Size < 6){return new ValidationResult("For women's shirts, the size has to be greater or equal to 6.");}}return ValidationResult.Success;}}
}
- 我们验证的是Size,所以在Model里的Size添加我们自定义的Attribute
[Shirt_EnsureCorrectSizing]
public int Size { get; set; }
6. WebApi Return Types
6.1 直接返回对象
- 创建一个List,存放所有的Shirt实例,返回一个Shirt类型
- 通过id访问
https://localhost:7232/api/shirts/1
, 返回一个json
{shirtId: 1,brand: "My Brand",color: "Blue",size: 10,gender: "Men",price: 30
}
6.2 返回多类型
- 如果返回多类型,就不能指定具体返回的类型,需要返回一个
IActionResult
[HttpGet("{id}")]
public IActionResult GetShirtById(int id)
{if (id <= 0){return BadRequest("Invalid shirt ID");}var shirt = shirts.FirstOrDefault(x => x.ShirtId == id);if( shirt == null){return NotFound();}return Ok(shirt);
}
7. Action filter
- 使用Action filter进行data validation
7.1 创建filter
- 创建Filters文件夹,并且创建
Shirt_ValidateShirtId.cs
类,并且添加对ShortId的验证
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using WebAPIDemo.Models.Repositories;namespace WebAPIDemo.Filters
{public class Shirt_ValidateShirtIdFilterAttribute : ActionFilterAttribute{public override void OnActionExecuting(ActionExecutingContext context){base.OnActionExecuting(context);var shirtId = context.ActionArguments["id"] as int?;if (shirtId.HasValue){if (shirtId.Value <= 0){context.ModelState.AddModelError("ShirtId", "ShirtId is invalid.");var problemDetails = new ValidationProblemDetails(context.ModelState){Status = StatusCodes.Status400BadRequest};context.Result = new BadRequestObjectResult(problemDetails);}else if (!ShirtRepository.ShirtExists(shirtId.Value)){context.ModelState.AddModelError("ShirtId", "Shirt doesn't exist.");var problemDetails = new ValidationProblemDetails(context.ModelState){Status = StatusCodes.Status404NotFound};context.Result = new NotFoundObjectResult(problemDetails);}}}}
}
- 使用添加的filter,对 id进行验证
[HttpGet("{id}")]
[Shirt_ValidateShirtIdFilter]
public IActionResult GetShirtById(int id)
{return Ok(ShirtRepository.GetShirtById(id));
}
相关文章:
.Net WebAPI(一)
文章目录 项目地址一、WebAPI基础1. 项目初始化1.1 创建简单的API1.1.1 get请求1.1.2 post请求1.1.3 put请求1.1.4 Delete请求 1.2 webapi的流程 2.Controllers2.1 创建一个shirts的Controller 3. Routing3.1 使用和创建MapControllers3.2 使用Routing的模板语言 4. Mould Bind…...
.NET 技术 | 调用系统API创建Windows服务
01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失…...
OpenLinkSaas 2025年1月开发计划
先来看看OpenLinkSaas的大目标 在OpenLinkSaas的产品目标中,让开发人员更加方便的使用云资源是目标之一。通过各大云厂商的API,来可视化云上基础设施的数据是远远不够的。我们准备在2025年1月份增加方便管理和运营研发场景下服务器的能力。 这部分的功能…...
同态加密算法详解及Python实现
目录 同态加密算法详解及Python实现第一部分:同态加密概述与原理1.1 什么是同态加密?同态加密的定义:1.2 同态加密的分类1.3 同态加密的优势与挑战优势挑战第二部分:常见同态加密算法及其应用场景2.1 RSA同态加密支持操作应用场景2.2 Paillier加密支持操作应用场景2.3 Gent…...
【HarmonyOS NEXT】ArkTs函数、类、接口、泛型、装饰器解析与使用
1. 前置学习文档 【HarmonyOS NEXT】ArkTs数据类型解析与使用(https://juejin.cn/spost/7448894500348608522) 2. 前言 在原生JavaScript中只有函数和类的实现,为了更好的面向对象编程,TypeScript 引入了接口、泛型、装饰器等特性。ArkTS也继承了这些特性…...
【数学】矩阵的逆与伪逆 EEGLAB
文章目录 前言matlab代码作用EEGLAB 中的代码总结参考文献 前言 在 EEGLAB 的使用中,运行程序时出现了矩阵接近奇异值,或者缩放错误。结果可能不准确。RCOND 1.873732e-20 的 bug,调查 EEGLAB 后发现是 raw 数据的问题。 matlab代码 A_1 …...
用github镜像加速, --recursive还是去github站怎么处理?
小伙伴们大多碰到过github抽风的情况,时通时断,时快时慢,非常考验心情。 以前碰到连不上的时候,我大多就是在gitee和gitcode网站找一下镜像,找到后直接git clone 新地址即可。但是碰到 --recursive的时候就不行了&…...
第P2周:Pytorch实现CIFAR10彩色图片识别
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目标 实现CIFAR-10的彩色图片识别实现比P1周更复杂一点的CNN网络 具体实现 (一)环境 语言环境:Python 3.10 编 译 器: …...
springboot3访问第三方接口
添加依赖(如果尚未添加) 在pom.xml文件中,确保已经包含spring-boot-starter-web依赖,因为RestTemplate通常在这个依赖范围内。如果没有,添加如下依赖: <dependency><groupId>org.springframe…...
Ubuntu K8s
https://serious-lose.notion.site/Ubuntu-K8s-d8d6a978ad784c1baa2fc8c531fbce68?pvs74 2 核 2G Ubuntu 20.4 IP 172.24.53.10 kubeadmkubeletkubectl版本1.23.01.23.01.23.0 kubeadm、kubelet 和 kubectl 是 Kubernetes 生态系统中的三个重要组件 kubeadm: 主…...
大数据第三次周赛
类斐波那契循环数 #include<bits/stdc.h> using namespace std; #define int long long int arr[1000010]; bool key(int k){int num0;string strto_string(k);for(int i0;i<str.length();i){arr[num]str[i]-0;}int l0,rnum-1;int shix0; while(shix<k){shix0;for…...
《Java核心技术I》Swing用户界面组件
Swing和模型-视图-控制器设计模式 用户界面组件各个组成部分,如按钮,复选框,文本框或复杂的树控件,每个组件都有三个特征: 内容,如按钮的状态,文本域中的文本。外观,颜色,…...
Web开发 -前端部分-CSS
CSS CSS(Cascading Style Sheet):层叠样式表,用于控制页面的样式(表现)。 一 基础知识 1 标题格式 标题格式一: 行内样式 <!DOCTYPE html> <html lang"en"><head><meta…...
旅游系统旅游小程序PHP+Uniapp
旅游门票预订系统,支持景点门票、导游产品便捷预订、美食打卡、景点分享、旅游笔记分享等综合系统 更新日志 V1.3.0 1、修复富文本标签 2、新增景点入驻【高级版本】3、新增门票核销【高级版】4、新增门票端口【高级版】...
Windows 与 Linux 下 Ping IPv6 地址 | 常用网络命令
注:本文为网络命令相关文章合辑。 未整理去重。 一、IPv6 概述 IPv6 即 “Internet 协议版本 6”,因 IPv4 地址资源面临耗尽问题而被引入以替代 IPv4。IPv6 则提供了理论上多达 2 128 2^{128} 2128 个地址,有效解决地址不足困境。 IPv6 具…...
前端学习一
一 进程与线程 线程是进程执行的最小单位,进程是系统分配任务的最小单位。 一个进程可执行最少一个线程。线程分为子线程和主线程。 主线程关闭则子线程关闭。 二 浏览器进程 浏览器是多进程多线程应用。 进程包括: 浏览器进程 负责程序交互渲染…...
【Python · PyTorch】卷积神经网络(基础概念)
【Python PyTorch】卷积神经网络 CNN(基础概念) 0. 生物学相似性1. 概念1.1 定义1.2 优势1.2.1 权重共享1.2.2 局部连接1.2.3 层次结构 1.3 结构1.4 数据预处理1.4.1 标签编码① One-Hot编码 / 独热编码② Word Embedding / 词嵌入 1.4.2 归一化① Min-…...
Spring Framework 路径遍历漏洞复现(CVE-2024-38819)
hu0x01 产品描述: Spring Framework 是一个功能强大的 Java 应用程序框架,旨在提供高效且可扩展的开发环境。它结合了轻量级的容器和依赖注入功能,提供了一种使用 POJO 进行容器配置和面向切面的编程的简单方法,以及一组用于AOP的模块。0x02 漏洞描述: Spring Framework 存…...
心法利器[122] | 算法面试的八股和非八股讨论
心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。 2023年新的文章合集已经发布,获取方式看这里:又添十万字-CS的陋室2023年文章合集来袭,更…...
实操给自助触摸一体机接入大模型语音交互
本文以CSK6 大模型开发板串口触摸屏为例,实操讲解触摸一体机怎样快速增加大模型语音交互功能,使用户能够通过语音在一体机上查询信息、获取智能回答及实现更多互动功能等。 在本文方案中通过CSK6大模型语音开发板采集用户语音,将语音数据传输…...
AJAX家政系统自营+多商家家政系统服务小程序PHP+Uniapp
一款同城预约、上门服务、到店核销家政系统,用户端、服务端、门店端各端相互依赖又相互独立,支持选择项目、选择服务人员、选择门店多种下单方式,支持上门服务和到店核销两种服务方式,支持自营和多商家联营两种运营模式࿰…...
LiveData源码研究
LiveData 源码分析 前言 用过MVVM的大概知道LiveData可以感知组件的生命周期,当页面活跃时,更新页面数据, 当页面处于非活跃状态,它又会暂停更新,还能自动注册和注销观测者,能有效避免内存泄漏和不必要的…...
Root软件学习
一、命令行输入下方命令打开root文件 root filename.root 二、在root命令行下输入.help查看root下可用的指令 .help输入.q是退出root命令行 .q 三、输入下方指令查看当前打开的root文件的目录 .ls 四、打印Hits树下的内容(print) 方框里是各种树文…...
研发文档管理系统:国内外9大选择比较
文章主要对比了9款国内外研发文档管理系统:1.PingCode; 2. Worktile; 3. 飞书; 4. 石墨文档; 5. 腾讯文档; 6. 蓝湖; 7. Confluence; 8. Notion; 9. Slab。 在企业研发过…...
centos 7.9 freeswitch1.10.9环境搭建
亲测版本centos 7.9系统–》 freeswitch1.10.9 一、下载插件 yum install -y git alsa-lib-devel autoconf automake bison broadvoice-devel bzip2 curl-devel libdb4-devel e2fsprogs-devel erlang flite-devel g722_1-devel gcc-c++ gdbm-devel gnutls-devel ilbc2...
嵌入式驱动开发详解17(CAN驱动开发)
文章目录 前言CAN简介CAN收发器CAN协议讲解电气特性传输协议数据帧遥控帧错误帧过载帧帧间隔 同步矫正 CAN控制器CAN控制器模式CAN接收器CAN波特率 CAN设备树分析CAN测试后续参考文献 前言 该专栏主要是讲解嵌入式相关的驱动开发,但是由于部分模块的驱动框架过于复…...
探索 Janus-1.3B:一个统一的 Any-to-Any 多模态理解与生成模型
随着多模态技术的不断发展,越来越多的模型被提出以解决跨文本与图像等多种数据类型的任务。Janus-1.3B 是由 DeepSeek 推出的一个革命性的模型,它通过解耦视觉编码并采用统一的 Transformer 架构,带来了一个高度灵活的 any-to-any 多模态框架…...
黑马头条day01 微服务搭建
1.请求调用流程 如http://localhost:8803/static/js/2.0195d7180dc783c3fe99.js这种静态资源,采用http的发送到本地8803端口的静态资源请求,而nginx配置的监听8801、8802、8803,所以请求走到nginx,nginx的admin配置文件 upstream…...
AI辅助编程工具对比:Cursor AI、Windsurf AI 和 GitHub Copilot
功能和特性 1. Cursor AI 基于VS Code构建,集成了GPT-4等多个AI模型,提供高级智能支持。支持AI代码补全、错误修正以及通过自然语言执行命令。具备多文件编辑和上下文理解能力,能够在复杂项目中提供跨文件的智能建议。提供标签功能…...
【Qt】qt安装
在工作一年之后,还是想做一个Qt的教程,遥想研一刚刚接触Qt,从0到1学习,没有什么参考书籍,网上的资料也不多,幸好Qt官方文档写得好,加上自己肯研究,才堪堪入门。 现在我想自己写一个…...
课设项目十:智能手电筒(使用金沙滩51单片机)
00 题目介绍 功能: 硬件设置: 使用51单片机连接光敏传感器、LED灯和手电筒开关按钮。 环境感知: 实时监测周围光照强度。 LED控制: 根据光照强度自动控制LED灯的开关。 手动控制: 提供手电筒开关按钮,…...
Oracle中COUNT函数对NULL和空字符串的处理方式
Oracle中,使用COUNT函数的时候,COUNT()和COUNT(null)得到的结果都是0,也就是说,如果我们COUNT中选择的那列属性中为null的或者的那行是不会被计数的。MySQL中count(null)效果和Oracle中一样,但是count()能正常计数。 在…...
OpenHarmony和OpenVela的技术创新以及两者对比
两款有名的国内开源操作系统,OpenHarmony,OpenVela都非常的优秀。本文对二者的创新进行一个简要的介绍和对比。 一、OpenHarmony OpenHarmony具有诸多有特点的技术突破和重要贡献,以下是一些主要方面: 架构设计创新 分层架构…...
Windows常用命令
该篇文章是博主不断从工作中总结而来,会持续不断更新 文件和目录管理命令 列出指定目录中的文件和子目录:dir 路径 更改当前工作目录:cd 路径 创建新目录:mkdir 目录名 删除空目录:rmdir 目录名 删除指定文件…...
牛客网 SQL2查询多列
SQL2查询多列 select device_id,gender,age,university //查询哪些字段 from user_profile //从哪个表中查找 每日问题 C 中面向对象编程如何处理异常? 在C中,面向对象编程(OOP)处理异常主要通过异常处理机制来实现。C 提供了…...
容器,网络基础
小结: 1、利用网桥和虚拟网卡 2、利用Veth Pair虚拟设备,一个网卡可以直接出现在另外一个网卡中 一个Linux容器能看见的“网络栈”,实际上是被隔离在它自己的Network Namespace当中的 “网络栈”,就包括了:网卡&#…...
Treap树堆【东北大学oj数据结构8-4】C++
题面 二叉搜索树会因为插入的数据的值可能变得不平衡,搜索/插入/删除操作的效率变得低效。例如,如果依次插入 n 个升序的数据,则树将看起来像一个列表,其高度将为 n,并且查询时间变得很长。一个解决策略是随意打乱要插…...
基于STM32的智电表系统课题设计思路:python友好界面、ADC、UART串口、数据分析
1. 项目选题与需求分析 1.1 选题背景和动机 随着社会的快速发展,电力的消耗不断增加,如何高效管理和监测用电成为了一个重要的课题。传统的电表只能提供简单的用电计量,无法满足现代家庭和工业对用电数据实时监控、远程控制及数据分析的需求…...
博弈论1:拿走游戏(take-away game)
假设你和小红打赌,玩“拿走游戏”,输的人请对方吃饭.... 你们面前有21个筹码,放成一堆;每轮你或者小红可以从筹码堆中拿走1个/2个/3个;第一轮你先拿,第二轮小红拿,你们两个人交替进行;拿走筹码堆…...
【人工智能解读】神经网络(CNN)的特点及其应用场景器学习(Machine Learning, ML)的基本概念
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默, 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把…...
Spring Cloud与Spring Cloud Alibaba:全面解析与核心要点
Spring Cloud与Spring Cloud Alibaba:全面解析与核心要点 一、引言 在当今的分布式系统开发领域,Spring Cloud和Spring Cloud Alibaba都是极为重要的框架。它们为构建大规模、高可用、分布式的应用系统提供了丰富的工具和组件。本文将深入探讨Spring C…...
Java 泛型
1. 泛型 (1) 泛型:定义类、接口、方法时,同事声明了一个或多个类型变量(如<E>),称为泛型类、泛型接口、泛型方法、它们统称为泛型。可以在编译阶段约束要操作的数据类型 public static void main(String[] args) {//没加泛型 可以放任何…...
CentOS7 搭建 MQTT(mosquitto)环境并收发数据
零:说在前面 最近在研究物联网相关内容,需要接收 Modbus 协议的数据。上游数据源提出由对方整合数据后使用 MQTT 协议将数据发送过来,因此需要了解一下什么是 MQTT。 首先,它是一个类似 kafka 的“发布/订阅”模式的消息框架&…...
操作系统课后习题2.2节
操作系统课后习题2.2节 第1题 CPU的效率指的是CPU的执行速度,这个是由CPU的设计和它的硬件来决定的,具体的调度算法是不能提高CPU的效率的; 第3题 互斥性: 指的是进程之间的同步互斥关系,进程是一个动态的过程&#…...
Mac Goland dlv 升级
Mac Goland dlv 升级 问题表现 WARNING: undefined behavior - version of Delve is too old for Go version 1.22.1 (maximum supported version 1.21)查看当前Goland dlv 版本 ☁ ~ /Applications/GoLand.app/Contents/plugins/go-plugin/lib/dlv/mac/dlv version Delve…...
vue使用pdfh5.js插件,显示pdf文件白屏
pdfh5,展示文件白屏,无报错 实现效果图解决方法(降版本)排查问题过程发现问题查找问题根源1、代码写错了?2、预览文件流的问题?3、pdfh5插件更新了,我的依赖包没更新?4、真相大白 彩蛋 实现效果图 解决方法…...
【FFmpeg】FFmpeg 内存结构 ⑥ ( 搭建开发环境 | AVPacket 创建与释放代码分析 | AVPacket 内存使用注意事项 )
文章目录 一、搭建开发环境1、开发环境搭建参考2、项目搭建 二、AVPacket 创建与释放代码分析1、AVPacket 创建与释放代码2、Qt 单步调试方法3、单步调试 - 分析 AVPacket 创建与销毁代码 三、AVPacket 内存使用注意事项1、谨慎使用 av_init_packet 函数2、av_init_packet 函数…...
[Unity Shader] 【游戏开发】【图形渲染】Unity Shader的种类2-顶点/片元着色器与固定函数着色器的选择与应用
Unity 提供了不同种类的 Shader,每种 Shader 有其独特的优势和适用场景。在所有类型的 Shader 中,顶点/片元着色器(Vertex/Fragment Shader)与固定函数着色器(Fixed Function Shader)是两种重要的着色器类型。尽管它们具有不同的编写方式和用途,理解其差异与应用场景,对…...
Unity 动画曲线研究(Dotween插件)
动画的曲线的介绍 动画曲线(Animation Curve)是一种用于描述动画属性值随时间变化的图形工具。 我们可以通过给自己的动画片段设定不同的动画曲线,使动画效果具有不同表现力。 常见的动画曲线设定有: 线性(Linear&…...
适合小白的超详细yolov8环境配置+实例运行教程,从零开始教你如何使用yolov8训练自己的数据集(Windows+conda+pycharm)
目录 一、前期准备所需环境配置 1.1. 虚拟环境创建 1.2 下载yolov8源码,在pycharm中进行配置 1.2.1 下载源码 1.2.2 在pycharm终端中配置conda 1.3 在pycharm的terminal中激活虚拟环境 1.4 安装requirements.txt中的相关包 1.5 pip安装其他包 1.6 预训练…...