杨中科 ASP.NET Core前后端分离开发

一、

前后端分离

1、传统MVC开发模式: 前后端的代码被放到同一个项目中,前端人员负责编写页面的模板,而后端开发人员负责编写控制器和模型的代码并且“套模板”。
缺点: 互相依赖,耦合性强,责任划分不清
2、主流的“前后端分离”: 前端开发人员和后端开发人员分别负责前端和后端代码的开发,各自在自己的项目中进行开发,后端人员只写Web API接口页面由前端人员负责。
为什么“前后端分离”更流行: 需求变动越来越大、交付周期越来越短、多端支持。
优点:独立开发,不互相依赖,耦合性低,责任划分清晰,前后端分别部署,可以针对性运维 (扩容等缺点: 对团队的沟通能力要求更高,提前沟通好接口和通知接口变更,不利于SEO (可以用“服务器端渲染”SSR),对运维要求更高
3、只有大项目才需要前后端分离吗?

示例:
1.新建webapi controller
在这里插入图片描述
2.新建请求与返回的两个类,加上进程信息保存类ProcessInfo
在这里插入图片描述

3.编写controller方法
在这里插入图片描述
4.运行

在这里插入图片描述
运行成功,返回当前电脑的进程信息
在这里插入图片描述

二 编写前端接口

搭建前端开发环境

1、Web API做后端开发,不绑定前端技术,也支持其他客户端。这一节用Vue演示,不讲解Vue基础
2、Vue搭建步骤
1安装Node.js
2) 设定国内镜像 npm config set registryhttps://registry.npm.taobao.org
3)安装yarn: npm install -g yarn
4)创建Vue项目: yarn create @vitejs/app 项目名字
5) 按照提示运行项目

在这里插入图片描述
创建好之后
在这里插入图片描述
运行项目 依次执行命令
在这里插入图片描述
在这里插入图片描述
运行结果:
在这里插入图片描述

三 前后端结合

前后端结合1

1、在src文件夹下创建views文件夹
2、安装ajax库axios,项目根目录: yarn add axios
3、在views文件夹下创建Login.vue文件

	<input type="text" v-model="state.loginData.userName"/><input type="submit" value="登录@click="loginSubmit"/><tr v-for="p in state.processes" :key="p.id"><td>i(p.workingSet64/1024)HK</td></tr>

示例:

1.创建views 文件夹
在这里插入图片描述
在这里插入图片描述
2.前端页面部分
在这里插入图片描述
3.安装ajax库
在这里插入图片描述
项目下会生成一个asios库
在这里插入图片描述
4.编写js

import axios from 'axios';
import {reactive,onMounted) from 'vue
export default { name: 'Login'setup(){const state=reactive(loginData:,processes:[]});const loginSubmit=async ()=>!const payload = state.loginData;//if(!data.isOK)const resp = await axios.post(https:/ /localhost:44360/api/Login/Login',payload)const data = resp.data;state.processes = data.processes;}return {state,loginSubmit);},
}

5、使用vue-router来做前端的页面路由。在前端的项目根目录执行: yarn add vue-router@4
6、在src下创建route文件夹,并且在route文件夹下创建index.js文件

import [ createRouter,createWebHashHistory} from "vue-router"
import Test from "../views/Test.vue"
import Login from "../views/Login.vue";
const routes = [fpath: "/", redirect: " /Test"")
(path: "/Test",name:"Test",component: Test),
(path: "/Login",name:"Login",component: Login)]
const router = createRouter(fhistory: createWebHashHistory(),routes: routes)),
export default router

在这里插入图片描述

7、编辑src/mainjs,增加import router from /route’以及use(router),修改main.js

import { createApp } from 'vue
import App from './App.vue'
import router from './route
createApp(App).use(router).mount('#app');

8、src/App.vue中增加指向Login视图的链接以及显示路由视图的

<template>
<div><router-link to="Login">Login</router-link></div><router-view />
</template>

9、测试:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
跨域问题
在这里插入图片描述
只要是端口不同 或者域名不同,都会被认为不是同一个网站,浏览器出于安全考虑,不给予访问

cors

1、跨域通讯的问题。解决方案: JSONP、前端代理后端请求(浏览器直接通过前端向后端请求数据,会导致前端服务器压力过大不推荐)、CORS等。
2、CORS原理: 在服务器的响应报文头中通过access-control-allow-origin告诉浏览器允许跨域访问的域名
3、在Program.cs的“var app=builder.Build()”这句代码之前注册

string[] urls = new[] { "http://localhost:3000" );builder.Services.AddCors(options =>
options.AddDefaultPolicy(builder => builder.WithOrigins(urls) //允许哪些域名 .AllowAnyOrigin 允许所有域名
.AllowAnyMethod()//允许哪些请求类型(get,post).withMethod()允许某一些
.AllowAnyHeader()//允许哪些报文头
.AllowCredentials()));
//.net 出于安全性考虑不允许所有的都写为any

在这里插入图片描述

4、在Program.cs的app.UseHttpsRedirection()这句代码之前增加一行app.UseCors()
在这里插入图片描述
重启项目
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/606417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【openGauss服务器端工具的使用】

【openGauss服务器端工具的使用】 gs_checkperf openGauss 不仅提供了gs_checkperf工具来帮助用户了解openGauss的负载情况。 使用数据库安装用户登录服务器&#xff0c;执行如下命令进行查看数据库性能&#xff1a; 简要信息展示&#xff1a;[ommopengauss03 ~]$ gs_checkperf…

跨平台的传输协议@WebDav协议@windows系统配置WedDav服务器@局域网内的WebDav传输系统

文章目录 WebDav协议基本信息启用必要的windows功能启动站点管理器IIS站点根目录访问权限设置站点的功能设置端口通行防火墙IMME文件类型(文件后缀)其他设备登录和访问本机的WebDav服务站点 小结优点缺点 refs WebDav 协议基本信息 来自wikipedia:基于Web的分布式编写和版本控…

借名买房合同的效力

此前司法实践对借名买房合同效力的认定较为统一&#xff0c;即借名买房合同无效主要系因行为人恶意串通、通谋虚伪意思表示&#xff0c;或者借名购买的房屋为经济适用房等保障性住房。借名买房鲜少因悖俗而无效。2020年12月26日最高人民法院作出&#xff08;2020&#xff09;最…

协程池与新脚本语言

今天的主人公名为——Melang。 这是一款使用C语言开发的“新”的脚本语言&#xff0c;然而其已经默默问世了6年之久。 下面笔者就带你走进Melang world。 What is Melang Melang是一款协程并发脚本语言。它是一款解释型&#xff0c;而非编译型语言。 在Melang中&#xff…

Tmux 使用小记

本文参考自 阮一峰老师Tmux 使用教程[1] Tmux,不仅仅是分屏那么简单。。。 与tmux类似的工具是screen 会话管理 将窗口与会话"解绑" 对于没有图形界面只有shell的场景(如服务器)&#xff0c;尤其有用..这是其最核心解决的问题(窗口管理啥的只能算锦上添花的辅助功能)…

代码随想录算法训练营第20天 | 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

目录 654.最大二叉树 &#x1f4a1;解题思路 &#x1f4bb;实现代码 617.合并二叉树 &#x1f4a1;解题思路 递归 &#x1f4bb;实现代码 700.二叉搜索树中的搜索 &#x1f4a1;解题思路 递归法 迭代法 &#x1f4bb;实现代码 98.验证二叉搜索树 &#x1f4a1;解题…

pod进阶版(1)

pod的相关知识 k8s的pad重启策略: Always deployment的yaml文件只能是Always pod的yaml三种模式都可以。 Onfailure:只有异常退出状态码非0才会重启。正常退出不重启。 Never&#xff1a;非正常退出和非正常退出都不重启。 容器的退出了pod才会重启。 pod可以有多个容器&…

实战:使用docker容器化服务

本文介绍使用docker安装mysql和redis&#xff0c;通过这两个的实战&#xff0c;了解一般的安装容器化服务的流程&#xff0c;体会服务容器化的好处 1.使用docker安装MySQL docker 拉取 mysql 镜像 docker pull mysql:5.7运行 mysql 镜像 docker run -p 3306:3306 --name mysql…

spring Security源码讲解-WebSecurityConfigurerAdapter

使用security我们最常见的代码&#xff1a; Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter {Overrideprotected void configure(HttpSecurity http) throws Exception {http.formLogin().permitAll();http.authorizeRequests().antMatcher…

为什么我国的计算机教育那么差?

建议看看计算机科学速成课&#xff0c;一门很全面的计算机原理入门课程&#xff0c;短短10分钟可以把大学老师十几节课讲不清楚的东西讲清楚&#xff01;整个系列一共41个视频&#xff0c;B站上有中文字幕版。 每个视频都是一个特定的主题&#xff0c;例如软件工程、人工智能、…

C++:ifstream通过getline读取文件会忽略最后一行空行

getline是读取文件的常用函数,虽然使用简单,但是有一个较容易被忽视的问题,就是文件最后一行空行会被忽略。 #include <iostream> #include <fstream> #include <string> using namespace std;void readWholeFileWithGetline(string fileName) {string t…

设计模式的艺术P1基础—2.1 uml概述

设计模式的艺术P1基础—2.1 uml概述 设计模式的艺术P1基础—第2章 UML类图与面向对象设计原则 UML类图可用于描述每一个设计模式的结构以及对模式实例进行说明&#xff0c;而模式结构又是设计模式解法的核心组成部分。学一个设计模式&#xff0c;如果不能绘制和理解其结构图&am…

顺序表实现(下)(C语言)

几道相关例题,帮助大家更好理解顺序表. 文章目录 前言 一、顺序表二、创建顺序表并初始化三.删除非递减顺序表L中的重复元素四.在非递减顺序表中删除[s,t]之间的元素五.设计算法逆置顺序表L,并将序列L循环左移六.顺序表A和B的元素个数分别为m,n.A表升序排序,B表降序排序,两表中…

数据库系统原理总结之——数据库系统概述

数据库系统概述 第一章 数据库系统概述一、数据库基本概念二、数据库管理技术的发展三、数据库系统的三级模式结构四、数据库系统的运行与应用结构五、数据模型的分类 第一章 数据库系统概述 一、数据库基本概念 数据&#xff08;Data&#xff09; &#xff1a;描述事务的符号…

12306 抢票的糟糕体验

又到了一年一度的 12306 抢票时&#xff0c;和秒杀&#xff0c;抢购一样&#xff0c;这种事往往给人的体验非常差&#xff0c;去年经历过上海四月的应该深有感触。 我此前论述过随着网络带宽增加的速度超过 buffer 容量增加的速度&#xff0c;端到端拥塞控制将越来越不起作用&a…

【Leetcode】239.滑动窗口最大值(Hard)

一、题目 1、题目描述 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例1: 输入:nums = [1,3,-1,-3,5,3,6,7], k = 3 输出:[…

AI变现项目:刚做五天收益突破单日破50+,干货经验谈

今日是我单号操作的第五天。 打开今日头条&#xff0c;发现收益破新高了。 我这是一个号操作&#xff0c;10个号&#xff0c;20个号呢&#xff1f; 下面主要说说我的操作经验。 先确定领域 我是做的情感故事领域。 为什么做这个领域&#xff1f;(简单&#xff0c;原创度高…

家用洗地机哪款好用?洗地机品牌排行榜推荐

在如今的日常生活中&#xff0c;家用洗地机已经成为了家庭清洁中不可或缺的工具。然而&#xff0c;市面上各种不同品牌型号的洗地机让人眼花缭乱&#xff0c;让人难以选择。那么&#xff0c;家用洗地机现在买什么牌子质量好呢?为了解答这个问题&#xff0c;笔者选了几款品牌质…

120°AGV|RGV小车激光障碍物传感器|避障雷达DE系列安装与连线方法

120AGV|RGV小车激光障碍物传感器|避障雷达DE系列包含DE-4211、DE-4611、DE-4311、DE-4511等型号&#xff0c;根据激光飞行时间&#xff08;TOF&#xff09;测量原理运行的&#xff0c;利用激光光束对周围进行 120 半径 4m&#xff08;90%反射率&#xff09;扫描&#xff0c;获得…

鸿蒙开发解决agconnect sdk not initialized. please call initialize()

文章目录 项目场景:问题描述原因分析:解决方案:总结:项目场景: 鸿蒙开发报错: agconnect sdk not initialized. please call initialize() 问题描述 报错内容为: 10-25 11:41:01.152 6076-16676 E A0c0d0/JSApp: app Log: 数据查询失败: {“code”:1100001,“messag…