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

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

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

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

前端:Vue 3 + Vite

后端WebAPI部分:

1) Program.cs

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

app.UseDefaultFiles();
app.UseStaticFiles();

2)控制器代码

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

 [ApiController]
[Route("api/[controller]/[action]")]
public class AccountController : ControllerBase
{
//your code
}

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

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

//添加跨域策略
builder.Services.AddCors(options =>
{
// 这定义了一个名为 ``default`` 的 CORS 策略
options.AddPolicy("default", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
});
});

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

 app.UseCors("default");

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

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

前端Vue部分:

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

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

import { createRouter, createWebHashHistory, createWebHistory, RouteRecordRaw } from 'vue-router';
import home from '../components/home.vue'
const routes = [
{
path: '/',
name: 'Home',
component: home
}
] /**
* 定义返回模块
*/
const router = createRouter({
history: createWebHashHistory(),
routes
}) 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,然后像这样丢过去

import axios from "axios";
function logout() {
let data={
Msg:'Hello World'
}
axios
.post("api/Home/Hello",data)
.then((res) => {
console.log(res);
})
.catch((err) => {
console.log("发生异常:" + err);
});
}

看看 .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. 我使用Spring AOP实现了用户操作日志功能

    我使用Spring AOP实现了用户操作日志功能 今天答辩完了,复盘了一下系统,发现还是有一些东西值得拿出来和大家分享一下. 需求分析 系统需要对用户的操作进行记录,方便未来溯源 首先想到的就是在每个 ...

  2. 安装Speedtest到Python

    Speedtest模块可以测试主机的网络带宽大小. 运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:无 硬件要求:无 安装过程 1.安装Spee ...

  3. 测试平台系列(95) 前置条件支持简单的python脚本

    大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持. 欢迎关注我的公众号米洛的测开日记,获取最新文章教程! 回顾 上一节我们构思了一下怎么去支 ...

  4. Kubernetes Job Controller 原理和源码分析(三)

    概述Job controller 的启动processNextWorkItem()核心调谐逻辑入口 - syncJob()Pod 数量管理 - manageJob()小结 概述 源码版本:kubern ...

  5. MySQL - 分页问题

    MySQL中的分页 MySQL中通过LIMIT关键字可以实现分页,如:(其中0表示开始记录数,10表示返回数据的数量) SELETE * FROM table_name LIMIT 0, 10 MyB ...

  6. SpringBoot2.x整合Prometheus+Grafana【附源码+视频】

    图文并茂,新手入门教程,建议收藏 SpringBoot2.x整合Prometheus+Grafana[附源码+视频] 附源码+视频 目录 工程简介 简介 Prometheus grafana Spri ...

  7. docker和docker compose安装使用、入门进阶案例

    一.前言 现在可谓是容器化的时代,云原生的袭来,导致go的崛起,作为一名java开发,现在慌得一批.作为知识储备,小编也是一直学关于docker的东西,还有一些持续继承jenkins. 提到docke ...

  8. .NetCore实现图片缩放与裁剪 - 基于ImageSharp

    前言 (突然发现断更有段时间了 最近在做博客的时候,需要实现一个类似Lorempixel.LoremPicsum这样的随机图片功能,图片有了,还需要一个根据输入的宽度高度获取图片的功能,由于之前处理图 ...

  9. python 连接SAP 代码

    def Main(): sap_app = r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe" subproces ...

  10. centos通过日志查入侵

    1. Linux查看/var/log/wtmp文件查看可疑IP登陆 last -f /var/log/wtmp 该日志文件永久记录每个用户登录.注销及系统的启动.停机的事件.因此随着系统正常运行时间的 ...