特地记录一下,网上的教程写的稀里糊涂的,整得我都心塞塞的,其实实现的过程蛮简单的

问题是这样的:我将Vue构建生成好的文件,放在后端wwwroot文件里面,并开启静态文件访问功能,结果总是无法显示相应的Vue页面,其原因在于路径没有带#,导致路由失败

网上找了很久,很少有这么搭建项目的教程,还是记录一下,算是铺路叭~

后端:Asp.NET Core Web API,版本是 .NET 6

前端:Vue 3 + Vite

后端WebAPI部分:

1) Program.cs

在app.UseHttpsRedirection();下面添加这两行代码,用来启用静态文件的访问:

  1. app.UseDefaultFiles();
  2. app.UseStaticFiles();

2)控制器代码

在类名的上方添加 [Route("api/[controller]/[action]")]

  1. [ApiController]
  2. [Route("api/[controller]/[action]")]
  3. public class AccountController : ControllerBase
  4. {
  5. //your code
  6. }

3) 跨域策略(可有可无)

正常是前端调用后端接口,是不需要配置跨域的,如果有需要,可以在Program.cs添加跨域策略

  1. //添加跨域策略
  2. builder.Services.AddCors(options =>
  3. {
  4. // 这定义了一个名为 ``default`` 的 CORS 策略
  5. options.AddPolicy("default", policy =>
  6. {
  7. policy.AllowAnyOrigin()
  8. .AllowAnyHeader()
  9. .AllowAnyMethod();
  10. });
  11. });

在var app = builder.Build();后面添加使用

  1. app.UseCors("default");

4)创建一个wwwroot的文件夹,这个文件夹用来放置Vue编译后生成的文件,拷过来放进去就可以

以上就是后端部分要配置的

前端Vue部分

由于我赶潮流,用上Vue3 + Vite,于是踩上坑了,导致一直访问不到前端的页面,显示404错误。

主要问题在于vue的路由配置方面:vue-router路由版本:4以上,路由代码如下:

  1. import { createRouter, createWebHashHistory, createWebHistory, RouteRecordRaw } from 'vue-router';
  2. import home from '../components/home.vue'
  3. const routes = [
  4. {
  5. path: '/',
  6. name: 'Home',
  7. component: home
  8. }
  9. ]
  10.  
  11. /**
  12. * 定义返回模块
  13. */
  14. const router = createRouter({
  15. history: createWebHashHistory(),
  16. routes
  17. })
  18.  
  19. export default router

注意看上面的history,如果设置为createWebHistory()那么页面的访问路径里面是没有#的,比如 http://baseUrl/Home;

如果设置为createWebHashHistory(),那页面的访问路径就需要带#,比如 http://baseUrl/#/Home

这两者区别非常大!!!

像这种前端是搭配后端WebAPI一起使用的,如果URL没有#这个分隔符,后端服务会将访问的URL路由到相应的控制器上,如果没有对应的控制器,可想而知,它会送你一个404

但是带上#就不一样,URL路由的解析工作是Vue中,由vue-router,这样你配置的路由,才会正确显示对应的页面

这里猜想,不带#的这种形式,应该是为了部署在Nginx、Apache这种服务器使用

最后把Vue项目编译构建后,生成的文件放在后端wwwroot文件夹就好了,它会自动解析的

调用后端API接口时,可以用axios,然后像这样丢过去

  1. import axios from "axios";
  2. function logout() {
  3. let data={
  4. Msg:'Hello World'
  5. }
  6. axios
  7. .post("api/Home/Hello",data)
  8. .then((res) => {
  9. console.log(res);
  10. })
  11. .catch((err) => {
  12. console.log("发生异常:" + err);
  13. });
  14. }

看看 .post("api/Home/Hello",data),Post的地址相当于http://baseurl/api/Home/Hello,也就是说没有出现跨域的情况,前面跨域的配置可有可无

End~

【原创】Asp.NET Core Web API与Vue 3.0搭建前后分离项目的更多相关文章

  1. List多个字段标识过滤 IIS发布.net core mvc web站点 ASP.NET Core 实战:构建带有版本控制的 API 接口 ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目 Using AutoFac

    List多个字段标识过滤 class Program{  public static void Main(string[] args) { List<T> list = new List& ...

  2. ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目

    一.前言 这几年前端的发展速度就像坐上了火箭,各种的框架一个接一个的出现,需要学习的东西越来越多,分工也越来越细,作为一个 .NET Web 程序猿,多了解了解行业的发展,让自己扩展出新的技能树,对自 ...

  3. asp.net core web api + Element-UI的Vue管理后台

    后端:asp.net core web api + EF Core 前端:VUE + Element-UI+ Node环境的后台管理系统. 线上地址:http://www.wangjk.wang/ 密 ...

  4. ASP.NET Core Web APi获取原始请求内容

    前言 我们讲过ASP.NET Core Web APi路由绑定,本节我们来讲讲如何获取客户端请求过来的内容. ASP.NET Core Web APi捕获Request.Body内容 [HttpPos ...

  5. ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件

    前言: 从开始学习Vue到使用element-ui-admin已经有将近快两年的时间了,在之前的开发中使用element-ui上传组件el-upload都是直接使用文件选取后立即选择上传,今天刚好做了 ...

  6. 使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)

    对于开发人员来说,构建一个消费应用程序时去了解各种各样的 API 是一个巨大的挑战.在你的 Web API 项目中使用 Swagger 的 .NET Core 封装 Swashbuckle 可以帮助你 ...

  7. 在ASP.NET Core Web API上使用Swagger提供API文档

    我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的API文档功能.当设置IISExpress的默认启动路由到Swagger的API文档页 ...

  8. Docker容器环境下ASP.NET Core Web API应用程序的调试

    本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Docker容器环境下,对ASP.NET Core Web API应用程序进行调试.在 ...

  9. 在docker中运行ASP.NET Core Web API应用程序

    本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...

随机推荐

  1. 04C++核心编程(二-泛型编程)

    Day08 笔记 1 函数模板 1.1 泛型编程 – 模板技术 特点:类型参数化 1.2 template< typename T > 告诉编译器后面紧跟着的函数或者类中出现T,不要报错, ...

  2. 负载均衡之DR实验

    实验环境 本实验搭建在虚拟机中.一台服务器作为DR两台作为RS,还有一台为后续内容会用到的备用机. 实验环境示意图: 1. 修改网络层VIP 修改DR,添加VIP 修改前: 修改后: 修改RS,修改A ...

  3. github新项目npm错误

    当我们从GitHub或者别人那里拿到项目的时候,一般都是要先npm install 进行安装依赖.但是难免会遇到报错. 出现问题1: 解决方案:清除缓存npm cache clear --force之 ...

  4. php 使用phpqrcode生成二维码并上传到OSS

    一般情况调用phpqrcode第三方插件 会把生成的二维码图片保存到服务器,不保存服务器也会以header头的形式输出到浏览器,(我们不允许把图片文件保存的liunx服务器,只能保存到阿里云OSS存储 ...

  5. ssh隧道连接的方式连接数据库

    最好用xshell做隧道连接,其他工具没接触过过 1.先新建一个会话 2.点进刚刚建好的连接,右击属性 3.点进隧道,添加,输入映射到本地的配置 4.完成之后用数据库连接工具连接即可 参考连接: ht ...

  6. jetbrains 系列产品无限试用

    无限试用插件 在线安装 需要添加第三方插件仓库地址 设置 -- Manage Plugins Reposition... -- + https://plugins.zhile.io plugins 中 ...

  7. Canal搭建

    目录 搭建环境 MySQL环境 Canal环境 客户端 总结 需求:解决私有环境数据库的基础数据同步问题,每当中心库基础数据发生改变时,其他私有库都会增量同步 Canal主要用途是基于 MySQL 数 ...

  8. 抓包整理外篇fiddler————了解工具栏[一]

    前言 抓包本篇还没写完,因为在工作中,发现有人用fiddler 用的还不是很好,所以去介绍一下这个东西,fiddler大体分为10多个章节. 正文 首先了解一下fiddler的抓包原理哈. 可以看到当 ...

  9. ssh-基于ssh的文件传输

    scp 基于ssh做Linux主机间的文件传输     scp  文件路径  用户名@被传输的主机名/IP:文件要存放的路径     scp  /etc/fstab  root@10.0.0.2:/t ...

  10. Java 图片生成PDF

    public static void main(String[] args) { String imageFolderPath = "E:\\Tencet\\图片\\test\\" ...