Asp .Net Core Spa (一) - 入门
第一次写文章, 很久之前就想写来着了, 文章哪里不清楚的, 也请多多提出意见。
最近发现用 .net core + spa (single page application) 这个组合的人也变多了, 所以写一套 各种 关于 这个组合的实践方案, 也算是留个记录。
主要针对 .net core 2.1 以后的版本。主要原因是 之前的版本 spa 的实现还是基于 mvc 的pipeline 但是在 .net core 2.1 之后 引入了 UseSpa 这个 中间件后 Spa 已经完成了和mvc的分离 包括 SSR (服务端渲染)。
这是第一篇 入门 主要讲解 .net core 的 基础 spa 模版。项目案例用的 React, Angular 和 Vue 也类似, 不过Vue 貌似没有和Cli的整合 API
1. 创建项目
新项目 -> .Net Core -> ASP .NET Core Web Application -> React.js (暂时不选 Redux, Redux 很重要 但是几个框架都有自己不同的状态管理)
这里用的 Core 2.2 和 2.1 没什么太大变化
2. 项目目录
.Net Core Spa 项目,和NodeJs 项目类似,不过以 .Net Core为服务端。 主要服务 包括 静态文件,API 和 服务器渲染
./ClientApp Spa项目
./ClientApp/public Spa静态资源
./ClientApp/build Spa静态发布文件
3. 中间件和设置
主要套路都在这里
1. 定义Spa静态文件根目录,这里的文件 将被注册到Spa静态文件路由
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/build";
});
,默认是用的是 CientApp/build. 所有在 这个文件夹下的文件 会被直接 映射到 root url 之下
例如: ClientApp/build/react.js 这个文件就会被 映射到 localhost:5000/react.js
2. 使用Spa静态文件服务
app.UseSpaStaticFiles();
这个中间件将会启用静态文件映射
3. 使用Spa网页
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseReactDevelopmentServer(npmScript: "start");
}
});
这个就是代替了mvc 渲染 spa的中间件了,在没有服务器渲染的时候,我们定义了默认的SourcePath。
主要利用于跑node指令,和index.html入口无关,默认网页入口是 Spa静态文件根目录/index.html
当然 这里例子用的是 UseReactDevelopmentServer 这个必须配合 create-react-app (react-script)使用, 他会创建一个node event 然后监控 console
当react-script 启动的时候 会自动和 .net core产生proxy, 使你的.net core localhost 可以看见spa的页面,不过编译速度很慢。推荐关闭 使用 webpack-dev-server + api proxy 来提高开发速度
5. 修改中间件管道
默认的中间件管道并不是很完美,因为mvc中间件的性质 一旦请求进入了mvc中间件,请求是不会走道后面的中间件的。
这里就要修改中间件顺序啦。。然后利用到我们伟大的 app.Map 和 app.MapWhen
app.UseHttpsRedirection(); app.Map("/api", apiApp => {
apiApp.UseMvc(routes => routes.MapRoute("default", "{controller}/{action=Index}/{id?}"));
}); app.UseStaticFiles();
app.UseSpaStaticFiles();
我们把中间件改成这样,用Map 来限制 只有 /api 的路由才能进入 mvc中间件,当然用MapWhen也是可以的.
两者主要区别就在:
1. Map只针对Url,而MapWhen侧可以对整个请求作出判断
2. Map之后的Url会切除Map到的路由,而MapWhen则不变
我上面这个例子 在Map 检测到 /api 后才会进入mvc, 但是进入mvc的时候 api其实已经被去掉了, 所以controller不再需要强制标明 api/[controller], 只需要 [controller] 即可
6. csproj
其实有很多编译或者发布指令是通过项目的.csproj 来实现的
默认的指令有 DebugEnsureNodeEnv 和 PublishRunWebpack 分别是 npm install 和 npm install & run build
小结
项目本身其实很简单,也很容易上手,配合mvc 搭建的api 和新一代的前端框架,.net core的性能和发布的简易型,其实是可以尝试的。
这里有个我一直在更新的Boilerplate项目 https://github.com/JiarongGu/ReactCoreTemplate
一篇一篇来吧。。下一篇就说说 SSR的问题
Asp .Net Core Spa (一) - 入门的更多相关文章
- ASP.NET Core 之 Identity 入门(三)
前言 在上一篇文章中,我们学习了 CookieAuthentication 中间件,本篇的话主要看一下 Identity 本身. 最早2005年 ASP.NET 2.0 的时候开始, Web 应用程序 ...
- [转]ASP.NET Core 之 Identity 入门(三)
本文转自:http://www.cnblogs.com/savorboard/p/aspnetcore-identity3.html 前言 在上一篇文章中,我们学习了 CookieAuthentica ...
- ASP.NET Core 1.0 入门——了解一个空项目
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- ASP.NET Core 1.0 入门——Application Startup
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- 推荐:【视频教程】ASP.NET Core 3.0 入门
墙裂推荐了,免费,通俗易懂,唯一可惜的就是不是我录的,更可惜的是人家录制完了快半年了我还没看完... 版权归原作者所有,建议新手还是边看边实践吧,要不然过完一遍发现自己啥也没学会,不要眼高手低 [视频 ...
- ASP.NET Core 3.0 入门
原文:ASP.NET Core 3.0 入门 课程简介 与2.x相比发生的一些变化,项目结构.Blazor.SignalR.gRPC等 课程预计结构 ASP.NET Core 3.0项目架构简介 AS ...
- 【目录】ASP.NET Core 2.1 入门教程
ASP.NET Core 2.1 快速学习.入门系列教程,这个入门系列教程为了帮助大家快速上手ASP.NET Core. 本教程包含且不限于: 使用VS Code开发ASP.NET Core应用 AS ...
- 《ASP.NET Core应用开发入门教程》与《ASP.NET Core 应用开发项目实战》正式出版
“全书之写印,实系初稿.有时公私琐务猬集,每写一句,三搁其笔:有时兴会淋漓,走笔疾书,絮絮不休:有时意趣萧索,执笔木坐,草草而止.每写一段,自助覆阅,辄摇其首,觉有大不妥者,即贴补重书,故剪刀浆糊乃不 ...
- ASP.NET Core 6 从入门到企业级实战开发应用技术汇总
系列目录 [已更新最新开发文章,点击查看详细] 本系列博客主要介绍.NET6相关技术,从基础入门.进阶提升到高级升华,最后通过一个企业级项目实战来检验技术应用能力.把个人技术与经验分享出来,抛 ...
随机推荐
- 快速签发 Let's Encrypt 证书指南
本文仅记录给自己的网站添加"小绿锁"的动手操作过程,不涉及 HTTPS 工作原理等内容的讲解,感兴趣的同学可以参考篇尾的文章自行了解. 简单了解下我的实验环境: 云服务器:Cent ...
- linux新手记录;可执行文件直接运行
下载meshlab $sudo apt-get install meshlab 查看meshlab位置 $ whereis meshlab\meshlab: /usr/bin/meshlab /usr ...
- yii restful和一般路由共存
<?php namespace app\controllers; use Yii; use yii\rest\ActiveController; /** * */ class TestContr ...
- C语言-第5次作业
1.本章学习总结 1.1思维导图 1.2 本章学习体会及代码量学习体会 1.2.1学习体会 感受:和数组一样,这又是一个非常陌生的知识点--指针,刚刚开始学习的时候,被陌生的各种赋值方式搞得眼花缭乱, ...
- Java发送邮件 —— SpringBoot集成Java Mail
用途:此文仅供,自己今后的小程序通过邮件,批量通知用户. 简单记录了一些发送基本邮件的操作. 项目(SpringBoot版本为2.1.2.RELEASE): 核心依赖(其他相关依赖,在其使用的地方具体 ...
- 使用Keepalived配置主从热备实现Nginx高可用(HA)
Keepalived 简要介绍 Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务 ...
- CSS实现水平垂直居中的1010种方式
转载自:CSS实现水平垂直居中的1010种方式 划重点,这是一道面试必考题,很多面试官都喜欢问这个问题,我就被问过好几次了 要实现上图的效果看似很简单,实则暗藏玄机,本文总结了一下CSS实现水平垂直居 ...
- jmeter需要学习的其他点
jmeter知识点访问地址参数化http请求默认值远程连接非GUI运行测试命令jmeter参数设置jmeter常用脚本开发 Beanshell sampleDebug SampleFtp请求java请 ...
- DataNitro安装配置
必须安装python2,并配置环境变量,第一次安装时没有安装python,第一次打开可以使用,后来就打不开了,卸载重装也不行,安装Python2之后才可以. 按步骤安装就可以 不支持WPS
- Ant Design of React 框架使用总结1
一. 为什么要用UI 框架 统一了样式交互动画 . Ui框架会对样式,交互动画进行统一,保证了系统风格完整统一,不像拼凑起来的. 兼容性 ,不是去兼容IE 6 7 8那些低版本浏览器,而是对主流的标 ...