当前位置: 首页 > news >正文

前端Vue 后端ASP.NET Core WebApi 本地调试交互过程

环境概述:

后端:Visual Studio 、 .Net 6 、 WebApi

前端:Visual Studio Code 、 Vue:"^2.6.14" 、 vue/cli-service: "^3.0.3"

第一步:启动后端服务

在Program.cs中

// Program.cs - 这是你的后端入口
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();var app = builder.Build();
app.UseRouting();
app.MapControllers();app.Run(); // ← 这里启动Kestrel服务器!

实际发生

  1. .NET 6 启动内置的 Kestrel Web服务器

  2. 监听 http://localhost:7000 (HTTP) 和 https://localhost:7001 (HTTPS)

  3. 你的WebAPI现在可以处理HTTP请求了

对于第二步,Properties/launchSettings.json 中可以看到类似配置,侦听端口根据配置来:

第二步:启动前端服务

在VSCode终端中运行:

npm run serve

实际发生

  1. Vue CLI 启动开发服务器

  2. 监听 http://localhost:8080 (也是根据配置来)

  3. 实时编译你的 .vue 文件为浏览器可执行的JS

第三步:浏览器访问

1.你在浏览器输入:http://localhost:8080

2.浏览器发送HTTP请求

3.Vue开发服务器(Vue CLI)响应,返回一个HTML文件

4.浏览器解析HTML并构建DOM树

 


📡 前后端交互过程详解

当Vue组件调用API时:

假设你的Vue代码中有:

// Vue组件中的方法
methods: {async loadUsers() {try {// 调用后端APIconst response = await this.$http.get('https://localhost:7000/api/users');this.users = response.data;} catch (error) {console.error('API调用失败', error);}}
}

发生了什么?

1. 请求发出阶段
浏览器(localhost:8080)  → HTTP GET请求 → Kestrel服务器(localhost:7000)
2. 后端处理阶段

你的.NET WebAPI接收到请求:

// Controllers/UsersController.cs
[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{[HttpGet]public IActionResult GetUsers(){// 这里执行你的业务逻辑var users = new[]{new { Id = 1, Name = "张三" },new { Id = 2, Name = "李四" }};// 返回JSON数据return Ok(users);}
}
3. 响应返回阶段

Kestrel返回json格式的文件:

{"data": [{ "id": 1, "name": "张三" },{ "id": 2, "name": "李四" }]
}

🛡️ 关键技术:解决跨域问题

由于前端(8080)和后端(7000)端口不同,会产生跨域限制。你的环境通过以下方式解决:

方案1:后端配置CORS

在你的.NET 6 WebAPI中:

// Program.cs
var builder = WebApplication.CreateBuilder(args);// 添加CORS服务
builder.Services.AddCors(options =>
{options.AddPolicy("VueDevServer",policy =>{policy.WithOrigins("http://localhost:8080") // 允许Vue开发服务器.AllowAnyHeader().AllowAnyMethod();});
});var app = builder.Build();// 使用CORS中间件
app.UseCors("VueDevServer");app.MapControllers();
app.Run();

这样配置后

  • 浏览器允许 localhost:8080 访问 localhost:7000 的API

  • 前后端可以自由通信

方案2:Webpack Dev Server 的代理功能

配置参数参考:

devServer: {port: 6688,proxy: {'/api': {  // 匹配所有以 /api 开头的请求target: 'https://localhost:5656', // 转发目标changeOrigin: true,     // 修改请求头中的 Originsecure: false,          // 忽略SSL证书验证logLevel: 'debug',      // 输出代理日志onProxyReq(proxyReq, req, res) {  // 代理请求钩子console.log('代理请求:', req.originalUrl, '->', proxyReq.path);}}}
}

配置后工作流程:

浏览器 → http://localhost:6688/api/users↓Vue开发服务器接收请求↓代理转发 → https://localhost:5656/api/users↓.NET后端处理并返回↓代理返回给浏览器


🔧 目前开发环境特有的细节

Vue CLI服务的特性

由于你使用 vue/cli-service: "^3.0.3"

  • 支持热重载:修改Vue代码时页面自动更新

  • 提供源代码映射:浏览器中可调试原始Vue代码

  • 自动处理 ES6+ → ES5 转换

.NET 6 Kestrel的特性

  • 跨平台:可在Windows/Linux/macOS运行

  • 高性能:异步I/O模型

  • 自宿主:不需要IIS即可运行


🎨 可视化整个流程

┌─────────────────────────────────────────────────┐
│               你的开发电脑                      │
│                                                 │
│  ┌─────────────┐          ┌─────────────────┐   │
│  │  浏览器     │          │ Visual Studio   │   │
│  │localhost:8080│         │ (.NET 6 WebAPI) │   │
│  └─────────────┘          └─────────────────┘   │
│         │                          │            │
│  ┌─────────────┐                   │            │
│  │ VSCode      │                   │            │
│  │ (Vue CLI)   │ ←─────────────────┘            │
│  └─────────────┘                                │
│         │                                       │
│  ┌─────────────┐          ┌─────────────────┐   │
│  │前端开发服务器│ ←────→  │ 后端Kestrel服务器│   │
│  │ :8080       │   HTTP   │ :7000           │   │
│  └─────────────┘          └─────────────────┘   │
│                                                 │
└─────────────────────────────────────────────────┘

💡 总结

在你的环境中:

  1. 两个真正的服务器:Vue CLI开发服务器 + .NET 6 Kestrel服务器

  2. 本地网络通信:通过localhost环回地址在内部通信

  3. 跨域解决方案:.NET CORS配置允许Vue应用访问API

  4. 无魔法:这是标准的HTTP请求/响应,只是发生在你的电脑内部

这就是为什么你不需要"部署"也能前后端交互——你的开发机本身就是一个完整的全栈运行环境

http://www.dtcms.com/a/477919.html

相关文章:

  • KeepMouseSpeedOK:专业鼠标速度调节工具
  • leetcode 169. 多数元素
  • 沟通交流类网站有哪些ui外包网站
  • LeetCode——双指针(进阶)
  • SQL Server 2019实验 │ 安装及其管理工具的使用
  • RAGE框架:确保AI Prompt高效率高质量输出
  • aspcms 你的网站未安装 请先安装qq wordpress登陆
  • 广州白云做网站的公司百度推广有哪些形式
  • C++(Qt)软件调试---binutils工具集详解(39)
  • Qt 项目国际化从零到一:用 Qt Linguist 实现多语言动态切换(含源码与踩坑指南)
  • GitPuk入门到实战(8) - 使用GitPuk + Arbess进行CICD自动化部署
  • 网站后台登录地址修改怎么查询一个网站有没有做竞价
  • 《Qt应用开发》笔记p5
  • 【AI4S】AI设计小分子药物的三大底层逻辑
  • 网站建设费入什么科目2018把网站做静态化是什么意思
  • Node.js 事件循环(Event Loop)
  • C语言结构体详解:从定义、内存对齐到位段应用
  • 单片机进入 B. 中断无限循环异常解决方法
  • 探索Apache APISIX:动态高性能API网关
  • 【储能学习】电力基础知识
  • 2025 年项目管理转型白皮书:AI 驱动下的能力重构与跨域突破
  • linux网站建设技术指南台州 网站建设
  • AI超级智能体学习笔记
  • 海量域名SSL证书的免费批量签发
  • 基于 PyTorch 的手写数字识别
  • 悟空 AI CRM 中的线索功能:开启销售增长新引擎
  • 网站建设和维护方案吉林省城乡建设厅网站6
  • 互联网视频推拉流平台EasyDSS视频转码有哪些技术特点和应用?
  • 肥城网站建设费用lol做框网站
  • 微信小程序入门学习教程,从入门到精通,电影之家小程序项目知识点详解 (17)