最新要闻
- 专为AR/VR打造!苹果全新操作系统名为xrOS:有专属应用商店 最早明年推出
- 全球看点:高校花2.4亿把教学课堂搬到了海上 网友羡慕不已
- 全球观速讯丨《暗黑破坏神4》赛季通行证需氪金购买 暴雪重申:不会充钱就变强
- 20点狂欢:淘宝每满200减30、天猫/京东每满300减40
- 厂家称黄桃罐头没药效 网友调侃:黄桃罐头为何成东北人疯狂膜拜的神物
- 世界速读:首个进入太空的人类 宇航员加加林个人档案已解密:34岁死于空难
- 天天即时看!女生高铁录乐器考试被打断:工作人员知道情况后特意给换了地方
- 世界关注:将近30万人预约!有米粉要当小米13 Pro钉子户
- 每日观察!86寸4K巨屏!小米EA Pro 86电视今日开售 5999元
- 比Zen4还火 AMD游戏神U锐龙7 5800X3D史低2199元(首发3099)
- MIUI 14花宠摆件上线!米粉:小时候的QQ农场又回来了
- 每日快报!刘强东分享抗新冠经验:比感冒还轻微 京东将开通热线帮助员工
- 造车大战中360赢麻了?周鸿祎大赞自己投资的哪吒汽车
- 天天快看:整活!MIUI 14桌面大变:支持图标自定义调整
- 迷惑!大妈凌晨骑车撞上路边停放车辆:怒斥司机不开车灯
- 黄桃罐头遭疯抢 厂家实诚回应“没药效” 网友调侃:你不懂
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
环球要闻:C#中的WebAPI
import { createApp } from "vue" //框架实例import App from "./App.vue" import router from "./router" //路由import store from "./store" //状态管理vuex--类似全局变量import ElementPlus from "element-plus"//ui库import "element-plus/dist/index.css" //ui库的样式import * as ElementPlusIconsVue from "@element-plus/icons-vue"//ui库图标const app = createApp(App)for (const [key, component] of Object.entries(ElementPlusIconsVue)) { app.component(key, component)//注册icon图标,ui库图标 }app.use(store).use(router).use(ElementPlus).mount("#app")main.js入口的挂载
{ path:"/category", name:"category", component:()=>import("../views/CategoryView.vue")}index.js路由的配置
一、后台webAPI的搭建
创建asp.net core web api项目:搭建数据库连接1.创建【Models】文件夹保存实体类:Category.cs
(资料图片)
public class Category{ public int Id { get; set; } public string Name { get; set; }}
2.创建【Data】文件夹保存数据库上下文类:ShopDbContext.cs
using Microsoft.EntityFrameworkCore;using ShoopingWeb.Models;namespace ShoopingWeb.Data{ public class ShopDbContext:DbContext { public ShopDbContext(DbContextOptionsoptions) : base(options) { //参数DbContext选项值创建的这个新的类型,包装后用base关键字传给父类 } public DbSet Categories { get; set; }//添加表 }}
3.在【appsettings.json】文件中配置数据库连接字符串,这里用的vs自带数据库
"ConnectionStrings": { "ShopConn": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=OA;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" }
4.把数据库添加到服务全局【Program.cs】
builder.Services.AddDbContext(option => { //添加数据库上下文类 option.UseSqlServer(builder.Configuration.GetConnectionString("ShopConn"));//拿到数据库连接字符串,在appsettings.json配置文件里});
5.工具-》nuget包管理-》控制台:1.执行数据库迁移:add-migration initDb 2.保存到数据库:update-database 手打6.在【Controllers】文件夹下创建控制器:CategoryController.cs ,用的是RESTfull开发风格:路由+http请求=方法体定义的api
using Microsoft.AspNetCore.Http;using Microsoft.AspNetCore.Mvc;using Microsoft.EntityFrameworkCore;using ShoopingWeb.Data;using ShoopingWeb.Models;namespace ShoopingWeb.Controllers{ [Route("api/[controller]")]//路由:api/控制器名,这里是Category别写错哟 [ApiController]//控制器是webapi public class CategoryController : ControllerBase { private readonly ShopDbContext db; public CategoryController(ShopDbContext db)//鼠标右键快速生成字段并赋值 { this.db = db;//绑定数据库ShopDbContext上下文类 } [HttpGet]//在webapi中,是通过路由+http请求【特性】来找到方法的,和方法名无关,无调用只有注释的作用。 public async Task> GetList()//有async定义的异步编程,不过有没有返回值都必须Task { return await db.Categories.ToListAsync();//有async异步定义的方法,就必须有await来执行任务。 } [HttpGet("{id}")]//路由模式:api/controller/{id} public async Task > Getid(int id) { var category = await db.Categories.FindAsync(id);//通过id查询 if (category == null) { return NotFound();//返回404的状态码,多种返回类型用:ActionResult } return Ok(category);//返回数据 } [HttpPost]//增 public async Task > Add(Category model) { await db.Categories.AddAsync(model);//添加数据 await db.SaveChangesAsync(); return Ok(model.Id); } [HttpDelete("{id}")]//删 public async Task Delete(int id) { var category = await db.Categories.FindAsync(id); if (category == null) { return NotFound(); }//返回404,都是返回状态码,用接口即可:IActionResult db.Categories.Remove(category);//删除数据不需要异步 await db.SaveChangesAsync();//保存需要异步 return NoContent();//返回204,成功删除 } [HttpPut]//改 public async Task Update(Category model) { var category = await db.Categories.FindAsync(model.Id); if (category == null) { return NotFound(); }//返回404 category.Name = model.Name; await db.SaveChangesAsync();//保存修改的数据 return NoContent();//返回204,成功修改 } }}
测试:直接运行后台代码,可以看出后台其实返回的就是josn字符串和状态码而已
二、前后端CORS跨域配置
在Ajax请求时遵循的是同源策略:协议相同,域名相同,端口相同。而在webapi中前后端分离的,端口肯定不一样。所以不能在使用Ajax来发送请求。CORS(Cross-orgin-resource-sharing)跨域资源共享:打破同源策略的限制。Ajax为了安全考虑做的限制,打破限制的方案有很多,cors最常见。后台:服务端的配置【Program.cs】,开放运行策略
builder.Services.AddCors(options => //添加跨域服务{ options.AddPolicy("cors", p =>//添加策略,可以添加多种 { //如果是允许指定的域、方法、消息头需要使用WithOrigins、WithMethods、WithHeaders方法。 p.AllowAnyOrigin()//允许可以,参数可以给ip,不给表示允许所有 .AllowAnyMethod() //允许所有方法 .AllowAnyHeader();//请求头 });});
app.UseCors("cors");//启用策略中间件管道,必须放跳转:app.UseHttpsRedirection();的后面
前台:客户端vue3的框架配置文件【vue.config.js】,每次修改此文件需要重启项目,Ctrl+c项目关闭,重启命令:npm run serve
const { defineConfig } = require("@vue/cli-service")module.exports = defineConfig({//会覆盖webpack默认配置 transpileDependencies: true, devServer:{//开发环境的服务器配置 open:true,//是否自动打开浏览器 host:"localhost", port:8080,//修改默认端口 proxy:{//通过代理的方式访问,会重写路由 "/api":{ target:"https://localhost:7135/api/",//服务器请求地址,在后台Properties--》launchSettings.json中 secure:false,//HTTPS需要配置这个参数 changeOrigin:true,//请求头host属性,默认false发本机ip。true会把host设置为target的值。 pathRewrite:{"^/api":""}//路径重写,(正则表达式)识别api路径替换为空字符串。 } } }})
三、获取后台数据【axios请求库】
安装命令:npm install axios ,请求库还有很多,axios只是vue3的一种vue3前端src目录下创建【api】文件夹放配置文件:api_config.js
import axios from "axios" //请求库axios.defaults.baseURL="http://localhost:8080/api" //基础路径,做请求前缀。axios.defaults.headers["X-Requested-With"]="XMLHttpRequest" //请求类型:异步请求axios.defaults.headers.post["Content-Type"]="application/json" //post以json格式提交到后台export default axios;
获取后台所有数据:在【views】试图中【CategoryView.vue】组件下请求数据即可
<script setup> import {reactive,onMounted} from "vue" //vue里面要定义变量,需要导入reactive这个方法 import axios from "@/api/api_config";//请求库,@符号表示src文件夹 const tableData = reactive({list:[]})//reactive也可以定义一个对象list onMounted(()=>{ //类似于后台构造方法,初始化时调用 getList() }) const getList=()=>{//获取数据信息 return axios.get("/Category").then((res)=>{//get得的后台控制器的数据,返回结果用then方法获取。 tableData.list=res.data console.log(res.data)//打印到控制台 }) }</script> 商品分类添加分类 修改 删除
增删改:在【components】创建弹窗组件:AddCategory.vue 做添加和修改
<script setup> import {inject, reactive,toRefs,watch} from "vue" //reactive可以定义变量也可以定义对象。 import {ElMessage} from "element-plus" //弹窗 import axios from "@/api/api_config";//请求库 const state =reactive({ dialogVisible:false,//表示不显示对话框,ui库包对话框当做属性来判断了 ruleForm:{id:"",name:""}//对话框的数据,也是修改和添加用 });//如果没有toRef转换,那么必须通过state.dialogVisible这样一层一层的取值 const {dialogVisible,ruleForm} =toRefs(state)//将reactive转为ref对象,也不需要点value取值 const dialogCategory=()=>{//定义一个打开对话框的方法 state.dialogVisible = true;//调用方法就显示对话框 }; //主动暴露子组件方法,这是编译器的宏命令,不需要引入,其他组件就可以使用 defineExpose({dialogCategory})//需要配置文件.eslintrc.js将宏命令打开:"vue/setup-compiler-macros":true在env选项中添加。 const title = defineProps({//自动暴露这个变量 dialogTitle:{type:String},//标题 tableRow:{type:Object}//id }) watch(//监听器,是vue的一个选项,监听数据的变化而变化 ()=>title.tableRow,//需要监听的数据, ()=>{state.ruleForm=title.tableRow},//如果有变化就改变数据。 {//配置 deep:true,//是否深度检测,数据又多层,可以深度查找 immediate:true //立即执行 } ) const getList=inject("getList")//依赖注入刷新页面,传过来的用provide,接收的用inject const add =()=>{ if(title.dialogTitle==="添加数据"){ let param={name:ruleForm.value.name} //let定义的变量在作用于大括号中,出了大括号无用 axios.post("/Category",param).then(()=>{ ElMessage.success("添加成功") getList()//刷新页面数据 state.dialogVisible = false//关闭窗口 }) }else{ let param={ id:title.tableRow.id, //id name:ruleForm.value.name //姓名 } axios.put("/Category",param).then(()=>{ ElMessage.success("修改成功") getList()//刷新页面数据 state.dialogVisible = false//关闭窗口 }) } }</script>
数据页代码如下
商品分类添加分类 修改 删除 <script setup> import {reactive,onMounted,ref, provide} from "vue" //vue里面要定义变量,需要导入reactive这个方法 import axios from "@/api/api_config";//请求库,@符号表示src文件夹 import AddCategoryVue from "@/components/AddCategory.vue"; //子组件,对话框的标签 import { isNull } from "@/utils/filter";//自定义的做数据筛选处理 import { ElMessage, ElMessageBox } from "element-plus"//删除的消息弹窗 const tableData = reactive({list:[]})//reactive也可以定义一个对象list onMounted(()=>{ //类似于后台构造方法,初始化时调用,自动运行 getList() }) const getList=()=>{//获取数据信息的方法 return axios.get("/Category").then((res)=>{//返回结果用then方法获取。 tableData.list=res.data console.log(res.data)//打印到控制台,测试数据用 }) } provide("getList",getList);//依赖注入:跨组件,把这个方法提供给子组件执行,传过去的用provide,接收的用inject他们两个是一对依赖注入 const AddCategory = ref(null)//定义在标签里的ref属性,当做一个实例,名字就代表了这个对话框组件,就可以用变量去调用他里面的方法了 const dialogTitle =ref("")//弹窗标题 const tableRow =ref({})//修改和删除的id,绑定到标签,传给子组件 const handleDialog=(row)=>{ //打开弹窗的事件 if(isNull(row)){ dialogTitle.value="添加数据" }else{ dialogTitle.value="修改数据" tableRow.value = row //把id传入子组件的弹窗 } AddCategory.value.dialogCategory()//调用子组件的弹窗方法 } const open =(id)=>{ ElMessageBox.confirm("你确定要删除吗?","温馨提示",{ confirmButtonText:"确定", cancelButtonText:"取消", type:"warning", }).then(()=>{ axios.delete(`/Category/${id}`).then(()=>{//这里的符号是反引号波浪线下面 ElMessage({ type:"success", message:"删除成功!", }); getList() //加载数据的方法,刷新数据 }) }).catch(()=>{//捕捉到错误 ElMessage({ type:"info", message:"取消删除!", }) }) } </script>
这里自定义了一个数据过滤器:src项目创建【utils】文件夹:filter.js怎么配置一些数据过滤
export const isNull=(data)=>{ //定义个数据过滤器 if(!data)return true //普通值 if(JSON.stringify(data)==="{}")return true //对象 if(JSON.stringify(data)==="{}")return true //数组}
-
2022-6.824-Lab2:Raft
0 准备工作lab地址:https: pdos csail mit edu 6 824 labs lab-raft htmlgithub地址:https: github com lawl
来源: 环球要闻:C#中的WebAPI
专为AR/VR打造!苹果全新操作系统名为xrOS:有专属应用商店 最早明年推出
全球看点:高校花2.4亿把教学课堂搬到了海上 网友羡慕不已
2022-6.824-Lab2:Raft
007爬虫之requests模块进阶
全球今日讯!攻防世界-unseping(序列化,Bash shell)
全球观速讯丨《暗黑破坏神4》赛季通行证需氪金购买 暴雪重申:不会充钱就变强
JavaScript:this指针
20点狂欢:淘宝每满200减30、天猫/京东每满300减40
厂家称黄桃罐头没药效 网友调侃:黄桃罐头为何成东北人疯狂膜拜的神物
全球看点:验证jenkins自动化部署
世界速读:首个进入太空的人类 宇航员加加林个人档案已解密:34岁死于空难
天天即时看!女生高铁录乐器考试被打断:工作人员知道情况后特意给换了地方
2021冬--简单描述时间复杂度
PDF转图片
Python实战案例,tkinter+random模块,实现课堂随机抽选提问并语音播报学生姓名
世界关注:将近30万人预约!有米粉要当小米13 Pro钉子户
每日观察!86寸4K巨屏!小米EA Pro 86电视今日开售 5999元
比Zen4还火 AMD游戏神U锐龙7 5800X3D史低2199元(首发3099)
MIUI 14花宠摆件上线!米粉:小时候的QQ农场又回来了
每日快报!刘强东分享抗新冠经验:比感冒还轻微 京东将开通热线帮助员工
Windows OpenGL ES 图像透明度
热门看点:我“采访”了 ChatGPT
观察:Blazor和Vue对比学习(进阶.路由导航二):布局(母版/嵌套)
世界简讯:WPF内嵌Http协议的Server端
造车大战中360赢麻了?周鸿祎大赞自己投资的哪吒汽车
天天快看:整活!MIUI 14桌面大变:支持图标自定义调整
当前速读:post表单数据格式完全解析multipart/form-data(C#实现)
队列之王: Disruptor 原理、架构、源码 一文穿透
每日视讯:Python如何导入自定义模块?
环球通讯!进制转换和计算机存储规则
SpringBoot整合Swagger2在线文档
迷惑!大妈凌晨骑车撞上路边停放车辆:怒斥司机不开车灯
黄桃罐头遭疯抢 厂家实诚回应“没药效” 网友调侃:你不懂
环球观焦点:曝Redmi K60系列依然将采用塑料支架 为了性价比?
注意!鲍鱼被列入濒危物种红色名录:20种或灭绝
10.3寸墨水屏!联想YOGA Paper墨水平板今日开售 3699元
天天热点评!环形队列、 条带环形队列 Striped-RingBuffer (史上最全)
梅西进4强 雷军点赞:阿根廷门将神了 太给力
全球微速讯:苹果要大赚!消息称iPhone 15又涨价 高端万元起:华为Mate60等跟涨吗
天天快资讯:深度学习基础课:最大池化层的前向传播推导
阿根廷点球大战淘汰荷兰:梅西点射破门 追平巴蒂纪录网友纷祝贺
国际领先!中国天眼获得银河系气体高清图像:揭露恒星诞生到消亡
世界热讯:巴西点球大战3-5克罗地亚!无缘四强 内马尔赛后痛哭
今日播报!Python装饰器与迭代器的学习教程
全球快资讯:你必须记住的30个CSS选择器?
最轻折叠屏OPPO Find N2来了!朱海舟:上手后你会WOW一下
当前热点-负债585.68亿、工资发不出:国美获黄光裕公司贷款1.5亿港元
天天快讯:NVIDIA力推的光追版《传送门》游戏被指代码糟糕:AMD显卡坑了
零百加速3.8秒马力暴躁 蔚来全系车型试驾会郑州站开启
世界短讯!MAUI新生5.2-样式外观:控件状态样式VisualState
python实现简单的商品数据管理系统
全球动态:asp.net core 基于Cookies的认证,自定义认证方案
全球新消息丨nginx中的正则表达式,location路径匹配规则和优先级
当前观点:后矿难时代 显卡价格仍居高不下
环球通讯!Java校验自定义枚举值
全球观天下!第一百一十一篇:基本引用类型Date
天天快消息!布洛芬不用抢 中国产能全球第一:一家公司就够33亿人用
天天短讯!BLOG-3总结
世界即时:突发!特斯拉中国工厂将停产Model Y
世界速看:一箱油能跑1200公里!比亚迪护卫舰07上市 20.28万起
当前通讯!雷军再谈小米13徕卡影像:非常自豪 你一定会被震撼到
【天天时快讯】我 一个程序员 靠玩ChatGPT年薪210万
世界看点:DX9性能大涨80% Intel驱动打鸡血原因找到了:做法很聪明
关注:南京一外卖小哥逆行撞劳斯莱斯 网友:几十年外卖白送了
今日快看!全球首架C919正式交付 中国搞这款大飞机有多不容易?
AI画作拍出110万高价创纪录!实测百度AI作画 效果惊艳
主人吃螺蛳粉:猫咪被臭到自闭
世界观速讯丨19岁少女无法走路 竟是因为它?国家早已明令禁止!
rsync远程同步
世界观焦点:AMD RX 7900 XTX渲染跑分性能曝光:感觉和RTX 4080两个时代
【热闻】国内电影票房已达285亿 《阿凡达2》成救命稻草:高价被指吃相难看
世界热推荐:为什么日本人更健康长寿?这12个“秘诀”值得借鉴
小米13 Pro长焦表现一绝:10cm至无穷远均可合焦
【报资讯】网传辽宁一有轨电车碾压电动自行车 官方回应:系剐蹭、人无碍
netmiko+textfsm自动统计交换机端口模块型号数量与闲置模块
【全球独家】【网关开发】4.Openresty 使用events插件进行事件通知
世界新消息丨蒟蒻颤抖:AI打信奥赛,三分之二赛题一遍过
【求助帖】从技术转为项目经理后,如何快速进入角色?
angr_ctf——从0学习angr(四):库操作和溢出漏洞利用
【世界速看料】新一代广汽本田皓影官图发布:大嘴变方嘴、可选7座
《原神》获TGA“玩家之声”奖!官方发800原石:全体都有
世界新动态:一部车骑10年!绿源推出INNO9-lite电动自行车:新国标 80km续航
天天快消息!NVIDIA发布527.56显卡驱动程序:DLSS 3游戏性能更强了
天天最资讯丨站起来了!哈弗H6插电混动版11月销量首超4000:直逼问界M5
焦点速递!CSS绝对定位7大应用场景实战案例分享
教你用CSS实现表单部件
环球热议:物联网平台在AIoT领域8大场景应用
东航官宣全球第一架C919商业首飞时间!这7大城市有福了
打爆丰田、本田混动SUV 比亚迪护卫舰07上市:20.28万起
天天微资讯!换代!AMD锐龙9 7950X3D来了:游戏性能比酷睿i9-13900K高出33%
【速看料】全国5G网络接入速率出炉:北京、上海都没抢到第一 移动最快
【世界新要闻】上线7年无敌手!《王者荣耀》11月吸金超13亿元:蝉联销冠
观点:MYSQL 1 DAY
世界微速讯:智能PDU,网络远程管理电源能耗提升配电效率
当前滚动:“云办公”如何用任务协同工具搞定项目和团队管理?
今日聚焦!SSM整合(spring-springmvc-mybatis)之CRUD
焦点日报:又拓新业务 比亚迪全新皮卡谍照曝光:DM混动没跑了
热点!不掉绒、无静电!史努比牛奶绒床品四件套大促:券后99元
天天快讯:一箭十四星 捷龙三号运载火箭首飞发射成功:海陆两用