首页 > 编程语言 >【原创】只用Asp.NET Core Web API与Vue 3.0搭建前后分离项目

【原创】只用Asp.NET Core Web API与Vue 3.0搭建前后分离项目

时间:2022-08-25 00:57:37浏览次数:75  
标签:Web vue 跨域 Core app Vue Asp Home 路由

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

问题是这样的:我将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~

 

 临时写了demo:https://files.cnblogs.com/files/iDream2018/VueWithWebAPIdemo.rar?t=1659951302

记得用vite创建vue项目 

npm init vite@latest my-vue-app --template vue

 

转 https://www.cnblogs.com/iDream2018/p/16562523.html

标签:Web,vue,跨域,Core,app,Vue,Asp,Home,路由
From: https://www.cnblogs.com/wl-blog/p/16622854.html

相关文章

  • Rider调试ASP.NET Core时报thread not gc-safe的解决方法
    新建了一个ASP.NETCore5.0的WebAPI项目,当使用断点调试Host.CreateDefaultBuilder(args)时,进入该函数后查看中间变量的值,报错Evaluationisnotallowed:Thethreadis......
  • 2022DASCTF X SU 三月春季挑战赛 web
    1.ezpop2.calc3.upgdstoreezpop给出了源码:<?phpclasscrow{public$v1;public$v2;functioneval(){echonew$this->v1($this->v2);......
  • javaWeb-HTML
    HTML基础标签字体大小(<h1>---<h6>)<h1>我是h1</h1><h2>我是h1</h2><h3>我是h1</h3><h4>我是h1</h4><h5>我是h1</h5><h6>我是h1</h6>换行<hr>......
  • 搭建Web服务器
    1.1、性能对比使用apachebench工具对Nginx静态页、GolangHttp程序、PHP7+SwooleHttp程序进行压力测试。在同一台机器上,进行并发100用户,共100万次Http请求的基准测试中......
  • web项目开发写接口时,为什么需要在关键位置打印日志-2022新项目
    一、业务场景最近在开发新功能,新功能主要就是写app的首页查询接口,接口比较多有十几个,首页会有各种查询,新增操作比较少。由于用户量比较大,据说并发量不小,所以首页的很......
  • core
    core:centreofsuchfruitsastheappleandpear,containingtheseeds果心kernelsoftandusuallyediblepartinsideanutorfruitstone(坚果或核果的)仁......
  • WebApi传数据以及Postman测试
    1.参数传值代码截图postman截图postman结果截图2.参数传json数据2.1传一条数据代码截图postman截图postman结果截图2.2传一个集合(多条数据)代码截图pos......
  • .NET6 WebApi 实现定时任务调度Quartz
    前言本地json持久化调度任务,无需数据库直接调用本地类方法,无需通过WebApi接口1.创建项目,安装组件创建.NET6WebApi项目;引入GZY.Quartz.MUI1.1.51.1Progarm.c......
  • ASP.NET Core Docker容器部署
    最简单的部署操作方式1.安装辅助工具1.1安装Gitsudoyum-yinstallgit安装完成后输入git命令查看1.2安装Nginx(这种部署方式暂时没用到)参考文档:https://......
  • CentOS安装部署Weblogic12.1.3
    开始以为和旧版安装一样,使用控制台的方式,下载bin文件,然后一步步在console执行下来就行了。万万没想到,从12C版本后,bin文件不提供了,改成全系统通用的jar文件(generic.jar)。......