VsualStudio2022各版本说明
VsualStudio2022企业版和社区版区别是收费和不收费。社区版是免费的。
主页链接:【Visual Studio 2022 IDE - 适用于软件开发人员的编程工具】
主要面向学生、开源软件开发者等个人,我们大学生肯定是免费使用的。
专业版与企业版则是收费的,更多面向高级开发者或企业用户。
VisualStudio2022软件一共有Community(社区版)、Professional(专业版)与 Enterprise(企业版)三个版本。我们使用社区版本就够用了。
社区版本具体说明
社区版本在测试过程中
- 社区版不支持TFS。但你可以另外搭建TFS服务,只是个人开发不需要这个东西。
- 社区版有单元测试。没有性能测试,没有负载测试,没有性能分析。
- 社区版创建虚拟环境的能力不行。
VisualStudio2022下载选项
VisualStudio2022启动样式
VisualStudio2022图标样式
VisualStudio2022初始内存消耗
创建项目ASP.NET Core项目
具体项目创建
这里可以在筛选中依次选择【C#】=>【Windows】=>【Web】,在列表中选择【ASP.NET Core Web API】来快速创建接口
编辑项目名称与项目位置
创建配置
这里默认是【.Net6.0】是一个长期稳定版本,使用3.1也是一个稳定版本。
取消【HTTPS】,这样省的麻烦。我们又没有单独去购买HTTPS所以不需要。
勾选【使用控制器】,为了方便。
一定要勾选上【OpenAPI】这样能自动添加swagger
非常干净的页面创建成功。
创建API控制器
鼠标右键直接添加【控制器】
修改路由配置
[Route("api/[controller]/[action]")]
如果没有这个路由的话访问起来会很麻烦。
配置跨域
看好代码放置位置,才能正确配置。
//注册跨域请求CORS服务 builder.Services.AddCors(options => { options.AddPolicy("AllowCors", builder => { builder.AllowAnyOrigin().AllowAnyMethod(); }); }); //启动跨域 app.UseCors("AllowCors");
准备创建接口
创建Model
就准备一个做数据的类就够了。我们创建一个【Product】类。
public string? ProductId { get; set; } public string? ProductName { get; set; } public string? ProductType { get; set; } public decimal Price { get; set; } public string? note { get; set; }
创建一个【SUCCESS】类用于返回正确结果
public SUCCESS(string msg,Object result) { state = true; this.msg = msg; this.result = result; } public bool state { get; set; } public string? msg { get; set; } public Object? result { get; set; }
创建一个【ERROR】类用于返回异常结果
这里的【result】返回为null,别用字符串啥的,免得被移动端的开发乱bb
public ERROR(string msg) { state = false; this.msg = msg; this.result = null; } public bool state { get; set; } public string? msg { get; set; } public Object? result { get; set; }
创建【RESTful风格】的API接口
接口测试业务逻辑梳理:
1、初始化数据[HttpGet]
2、基础列表分页访问测试[HttpGet]
3、精准id查询测试[HttpGet]
4、模糊查询测试[HttpGet]
5、分组查询测试[HttpGet]
6、倒序正序查询测试[HttpGet]
7、添加测试[HttpPost]
8、修改测试[HttpPut]
9、删除测试[HttpDelete]
完整接口代码(复制就能用)
/// <summary> /// 全局数据 /// </summary> static List<Product> list = new List<Product>(); /// <summary> /// 初始化函数 /// </summary> /// <returns></returns> [HttpGet] public object Init() { if (list.Count < 1) { return new ERROR("初始化完毕"); } list.Add(new Product() { ProductId = Guid.NewGuid().ToString("N"), ProductType = "中药", ProductName = "枸杞", Price = decimal.Parse("3.99"), note = "养生必备" }); list.Add(new Product() { ProductId = Guid.NewGuid().ToString("N"), ProductType = "中药", ProductName = "党参", Price = decimal.Parse("2.05"), note = "健脾益肺" }); list.Add(new Product() { ProductId = Guid.NewGuid().ToString("N"), ProductType = "蔷薇目", ProductName = "葎草", Price = decimal.Parse("5.72"), note = "性寒,走肺经与肾经,易导致过敏性呼吸道疾病。" }); list.Add(new Product() { ProductId = Guid.NewGuid().ToString("N"), ProductType = "蔷薇目", ProductName = "单倍体草莓", Price = decimal.Parse("92.99"), note = "单倍体无籽草莓," }); list.Add(new Product() { ProductId = Guid.NewGuid().ToString("N"), ProductType = "蔷薇目", ProductName = "草莓", Price = decimal.Parse("109.25"), note = "八倍体的凤梨草莓" }); list.Add(new Product() { ProductId = Guid.NewGuid().ToString("N"), ProductType = "杂草", ProductName = "香附子(有毒)", Price = decimal.Parse("6.92"), note = "生、醋炒、酒炒、碳炒,主解表通络。" }); return list; } /// <summary> /// 综合查询 /// </summary> /// <param name="pageNow"></param> /// <param name="pageSize"></param> /// <param name="ProductId"></param> /// <param name="ProductName"></param> /// <param name="isDesc"></param> /// <returns></returns> [HttpGet] public object GetInfo(int pageNow, int pageSize, string? ProductId, string? ProductName, bool isDesc) { try { if (pageSize == 0) { pageSize = 5; } var newList = list; if (!string.IsNullOrEmpty(ProductId)) { newList = list.Where(o => o.ProductId == ProductId).ToList(); } if (!string.IsNullOrEmpty(ProductName)) { newList = list.Where(o => o.ProductName.Contains(ProductName)).ToList(); } if (isDesc) { newList = newList.OrderByDescending(by => by.Price).ToList(); } newList = newList.Skip((pageNow - 1) * pageSize).Take(pageSize).ToList(); return new SUCCESS("查询成功", newList); } catch (Exception) { return new ERROR("查询失败"); } } /// <summary> /// 分组查询 /// </summary> /// <returns></returns> [HttpGet] public object GetGroupByType() { try { var newList = list.GroupBy(o => o.ProductType).ToList(); return new SUCCESS("查询成功", newList); } catch (Exception) { return new ERROR("查询失败"); } } /// <summary> /// 添加数据 /// </summary> /// <param name="product"></param> /// <returns></returns> [HttpPost] public object InsertProduct(Product product) { product.ProductId = Guid.NewGuid().ToString("N"); if ( string.IsNullOrEmpty(product.ProductName) || string.IsNullOrEmpty(product.ProductType) || product.Price == decimal.Zero || string.IsNullOrEmpty(product.note) ) { return new ERROR("参数不允许有空值"); } list.Add(product); return new SUCCESS("添加成功", product); } /// <summary> /// 修改操作 /// </summary> /// <param name="product"></param> /// <returns></returns> [HttpPut] public object UpdateById(Product product) { try { if (product == null) { return new ERROR("参数不允许有空值"); } for (int i = 0; i < list.Count; i++) { if (list[i].ProductId == product.ProductId) { list[i] = product; break; } } return new SUCCESS("修改成功", product); } catch (Exception) { return new ERROR("添加失败"); } } [HttpDelete] public object DeleteById(string ProductId) { try { if (string.IsNullOrEmpty(ProductId)) { return new ERROR("参数不允许有空值"); } for (int i = 0; i < list.Count; i++) { if (list[i].ProductId == ProductId) { bool isf = list.Remove(list[i]); return new SUCCESS("删除成功", isf); } } return new ERROR("删除失败"); } catch (Exception) { return new ERROR("删除失败"); } }
启动前设置
点击【调试】=》【开始执行(不调试)】
启动效果
Web端swagger效果:
Eolink测试测试:
由于我不想挨个输入,故而直接使用【Swagger.json】来导入项目
在新的页面打开json文件
保存json文件到任意地方。
打开Eolink的APIkit,引入swagger.json文件
导入需要一点时间
执行完毕后就会看到【导入成功】,正在写入项目,所以任务显示【进行中】。
由于没有异步刷新,故而需要手动切换一下页面重新加载。
接口查看
添加本地访问环境
这里匹配好端口号,跟服务器要相同。
设置环境
环境设置成功效果如下:
访问测试:
根据需求进行测试即可,非常快捷方便。
总结:
非常实用、快捷、高效的API接口创建方法。设置跨域也很方便。
使用Eolink可以直接导入测试,那就是更方便了。
希望本视频能为大家带来一定的价值,节约大家的开发时间。