基于.NetCore开发博客项目 StarBlog - (5) 开始搭建Web项目

系列文章

  • 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客?

  • 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目

  • 基于.NetCore开发博客项目 StarBlog - (3) 模型设计

  • 基于.NetCore开发博客项目 StarBlog - (4) markdown博客批量导入

  • 基于.NetCore开发博客项目 StarBlog - (5) 开始搭建Web项目

  • ...

前言

距离本系列的上一篇文章发布有段时间了,最近被一个培训活动整得身心俱疲,休息了一个周末好不容易才缓过来,赶紧继续来更新博客~

经过了前面的模型设计、博客数据导入之后,我们项目的准备工作已经基本完成,可以开始来做网站了,本文将记录StarBlog博客的AspNet.Core Web项目的搭建过程。

回顾一下

先来回顾一下,我们的Web项目是MVC类型的项目,作为博客的前台,本项目使用后端渲染页面以方便SEO,也就是博客网站这部分是前后端不分离的写法。

整理项目

打开我们之前创建的好的AspNetCore Web项目StarBlog.Web,模板生成的默认目录结构类似这样:

StarBlog.Web
├── Controllers
│   └── HomeController.cs
├── Models
│   └── ErrorViewModel.cs
├── Properties
│   └── launchSettings.json
├── Views
│   ├── Home
│   ├── Shared
│   ├── _ViewImports.cshtml
│   └── _ViewStart.cshtml
├── wwwroot
│   ├── css
│   ├── js
│   ├── lib
│   └── favicon.ico
├── Dockerfile
├── Program.cs
├── StarBlog.Web.csproj
├── appsettings.Development.json
└── appsettings.json

可以看到它自动生成了一堆东西,有些我们不需要,有些可以利用起来的,先来整理一下吧。

wwwroot目录中的静态资源是不需要的,模板自带的bootstrap啥的也不适合放进git,后面我们自己用NPM来管理静态资源,所以把wwwroot目录下的文件都删了。

Views里的是页面模板,里面代码是要全部重写的,先留着,后面直接重写就行。

Models里的ErrorViewModel.cs没用上,可以删了~

暂时先这样,来进行下一步了。

引入NPM管理前端资源

据说在.Net Framework时代,前端资源甚至能通过nuget来管理,不过包太少了,更新也跟不上NPM,所以现在.Net Core时代已经废弃了,我之前也写了一篇博客详细介绍使用NPM和Gulp来管理AspNetCore Web项目的静态资源,可以作为本文这部分的扩展阅读:Asp-Net-Core开发笔记:使用NPM和gulp管理前端静态文件

这部分依赖于node环境,如果本地没有安装node环境,请先在官网下载安装:https://nodejs.org/en/download/

StarBlog.Web项目的目录下执行命令初始化node项目(主要就是为了生成package.json文件)

npm init

然后直接编辑package.json文件添加依赖

{"devDependencies": {"gulp": "^4.0.2","gulp-changed": "^4.0.3","gulp-clean-css": "^4.3.0","gulp-concat": "^2.6.1","gulp-rename": "^2.0.0","gulp-uglify": "^3.0.2","rimraf": "^3.0.2"},"dependencies": {"@fortawesome/fontawesome-free": "^6.0.0","bootstrap": "^5.1.3","bootswatch": "^5.1.3","editor.md": "^1.5.0","jquery": "^3.6.0","masonry-layout": "^4.2.2","vue": "^2.6.14"}
}

这些是本项目需要用到的前端依赖,一股脑加进去之后,执行命令一键安装依赖

npm install

到这NPM管理前端资源的使命就结束了。

使用前端自动化工具Gulp

接下来要解决一个问题,NPM安装的依赖都在node_modules目录下,要怎么把这些资源放到wwwroot目录下呢?手动复制粘贴?no,这也太麻烦了,前端工具链中为我们提供了更方便的生产力工具——Gulp。

关于Gulp的介绍可以看我之前的这篇博客:Asp-Net-Core开发笔记:使用NPM和gulp管理前端静态文件

这里就不重复了,直接安装:

npm install --global gulp-cli

然后在StarBlog.Web目录下新建gulpfile.js文件,内容比较长,我就不全部贴出来了,全部代码可以在GitHub查看到:https://github.com/Deali-Axy/StarBlog/blob/master/StarBlog.Web/gulpfile.js

这里贴一下关键的配置

// 使用 npm 下载的前端组件包
const libs = [{name: "jquery", dist: "./node_modules/jquery/dist/**/*.*"},{name: "popper", dist: "./node_modules/popper.js/dist/**/*.*"},{name: "bootstrap", dist: "./node_modules/bootstrap/dist/**/*.*"},{name: "bootswatch", dist: "./node_modules/bootswatch/dist/**/*.*"},{name: "prismjs", dist: "./node_modules/prismjs/**/*.*"},{name: 'vue', dist: './node_modules/vue/dist/**/*.*'},{name: 'masonry-layout', dist: './node_modules/masonry-layout/dist/*.*'},
];// 使用 npm 下载的前端组件,自定义存放位置
const customLibs = [{name: "editormd", dist: "./node_modules/editor.md/*.js"},{name: "editormd/css", dist: "./node_modules/editor.md/css/*.css"},{name: "editormd/lib", dist: "./node_modules/editor.md/lib/*.js"},{name: "editormd/examples/js", dist: "./node_modules/editor.md/examples/js/*.js"},{name: 'font-awesome', dist: './node_modules/@fortawesome/fontawesome-free/**/*.*'},
]

搞定,我们配置的是把前端依赖复制到wwwroot/lib目录下

之后执行命令

gulp move

搞定~

如果觉得每次添加前端依赖之后还得敲命令麻烦的话,可以看我之前这篇配置gulp的博客,在IDE里配置一下,以后点一下就行。

修改 _Layout 模板

前端资源都准备齐全,接下来修改一下前端主模板,方便接下来的写页面~

编辑wwwroot/Shared/_Layout.cshtml文件,修改<head>节点下的引用代码

<head><!-- 第三方依赖 --><link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css"><link rel="stylesheet" href="~/lib/font-awesome/css/all.css"><!-- 我们自己写的样式 --><link rel="stylesheet" href="~/css/features.css"><link rel="stylesheet" href="~/css/metro.css"><link rel="stylesheet" href="~/css/footer.css">@await RenderSectionAsync("head", false)
</head>

修改最后面的js引用

<!-- 第三方依赖 -->
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/lib/vue/dist/vue.js"></script>
<!-- 我们自己写的js -->
<script src="~/js/site.js"></script>
@await RenderSectionAsync("bottom", false)

有些具体的代码太长了我就不贴了,涉及到具体功能的时候我再贴上关键代码,因为项目已经基本完成,代码在GitHub都有,大家可以参考一下GitHub代码~

到这写页面的准备工作就完成了,后面就是把页面一个个写完~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java计算每个元素出现的百分比_Java程序计算百分比

百分数表示百分数(百)&#xff0c;即百分数与100之比。百分数的符号为&#xff05;。我们通常会计算获得的商标&#xff0c;投资回报率等百分比。该百分比也可以超过100&#xff05;。例如&#xff0c;假设我们有总数和一部分。所以我们说那一部分占总数的百分之几&#xff0c;…

ECShop 前台用户中心调整左侧栏目及中心部分呈现页面

1、首先调整用户中心左侧栏目&#xff0c;在 .dwt 里面我修改了半天&#xff0c;页面没改动。。后来某大神说这个是在另一个文件里&#xff1a;/themes/你用的模板目录/library/user_menu.lbi 文件改一个试试吧~ 不出意外的成功了吧2、中心部分呈现内容的调整。&#xff08;今天…

【测绘程序设计】高斯克吕格投影:带号及中央经度计算神器V1.0(附源程序)

【问题描述】:很多情况下,我们知道某一地点的坐标(经纬度),需要计算其在高斯克吕格投影中的带号及中央经度。关于该问题,有具体的公式可言,只是计算过程稍微繁琐一些,当然啦,我们可以写程序来解决,谁叫我们是名副其实的GISer呢?另外,这些复杂的计算过程还是交给计算…

外部中断0(含知识点)

1 #include "stm32f10x.h" // 相当于51单片机中的 #include <reg51.h>2 #include "stm32f10x_gpio.h"3 #include "stm32f10x_exti.h"4 #include "misc.h"5 6 /*外部中断配置*/7 8 9 int main(void)10 {11 /*************…

Git之tag

1 tag相关命令 1) 打上tag git tag v1.0.0 git tag -a v1.0.0 -m info 2) 查看tag git tag 3) 切换tag git checkout tagname 4) 删除tag git tag -d v1.0.0 5) 推送远程 推送单个tag git push origin v1.0.0 推送所有tag git push origin --tags

[python opencv 计算机视觉零基础到实战] 十七、用鼠标画画

一、学习目标 了解长轴和短轴参数了解旋转角度参数了解起始角度参数了解终止角度参数 二、深入了解OpenCV的ellipse方法 2.1 纵横 椭圆的绘制方法在上一节中我们已经知道了是使用ellipse&#xff0c;ellipse的函数原型如下&#xff0c;为了清晰认识ellipse方法&#xff0c;…

Microsoft Build 2022 到来,开发者们做好准备了吗?

Microsoft Build 2022 将会在5月24日 - 5月26日正式举行&#xff0c;作为开发者的你是否和我一样期待本次的 Build&#xff0c;它会带来什么的技术革新以及黑科技呢&#xff1f;下面我就针对今年 Build 的几个主题结合相关技术来谈谈我对 Build 的期待。开发技术和相关工具今年…

【测绘程序设计】视距测量神器V1.0(附源程序)

神器预览: 一、视距测量概念 视距测量是利用水准仪的望远镜内十字丝分划板上的视距丝在视距尺(水准尺)上读数,根据光学和几何学原理,同时测定仪器到地面点的水平距离和高差的一种方法。 视距测量具有操作简便、速度快、不受地面起伏变化的影响的优点,被广泛应用于碎部测…

补作业:随机生成二元四则运算

四则运算代码如下&#xff0c;基础不好&#xff0c;刚完成作业&#xff0c;希望老师多给点平时成绩&#xff0c;谢谢老师&#xff01;#include<stdio.h>#include<stdlib.h>#include<time.h>int right0,wrong0;int a,b,c,d;/*加法运算*/void add(){int i,j;fo…

java 从数据库取值_java 连接数据库取值问题

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{//TODOAuto-generatedmethodstubXzdatasqlToolnewXzdata();//初始化并...public void doGet(HttpServletRequest request,HttpServletResponse response) throws I…

条件表达式

1.python中&#xff1a; a 1b 2 if a>1 else 3 2.C语言中&#xff1a;max (a>b)?a:b; 说明&#xff1a;条件运算符优先于赋值运算符 也可以这样写&#xff1a;a>b? a:c>d? c:d / a>b? (a100):(b100)转载于:https://www.cnblogs.com/yjw9520/p/4841301.ht

oracle导出数据库中表出现导出报错(EXP-00003)未找到段 (0,0) 的存储定义

前两天在使用oracle数据库&#xff0c;使用dba用户利用PL/SQL 中的tool中export table导出表结构时&#xff0c;出现了如下问题&#xff1a;好多张表“报错&#xff08;EXP-00003&#xff09;未找到段 (0,0) 的存储定义 ”&#xff0c;出现这样的结果&#xff0c;经过查找相关资…

Android Studio之查找当前类的位置图标没了

1 问题 我们知道在Android studio里面如果想快速看到该文件所在的目录位置&#xff0c;点击这个图标 现在这个图标没了&#xff0c;找不到了 2 解决办法 把下面的Autoscroll from Source的勾去掉就行。

[python opencv 计算机视觉零基础到实战] 十八、用鼠标进行画画

一、学习目标 了解如何在图片中加入文字了解如何使用鼠标进行图像绘制 二、了解如何通过鼠标进行图像绘制 2.1 了解putText方法的使用 putText方法接收图像&#xff0c;文字内容&#xff0c; 坐标 &#xff0c;字体&#xff0c;大小&#xff0c;颜色&#xff0c;字体厚度这…

【测绘程序设计】坐标正算神器V1.0(附C/C#/VB源程序)

坐标正算,就是根据直线的边长、坐标方位角和一个端点的坐标,计算直线另一个端点的坐标的工作。本文用C#语言和VB语言实现坐标正算,编写坐标正算神器。 计算实例: 实例1,设直线AB的边长DAB和一个端点A的坐标XA、YA为已知,则直线另一个端点B的坐标为: XB=XA+ΔXAB YB=YA+…

2.2 PostgreSQL 概念

PostgreSQL 是一种关系型数据库管理系统(RDBMS)。这意味着它是一种用于管理那些以关系形式存储数据的系统。关系实际上是表的数学称呼。今天&#xff0c;把数据存储在表里的概念已经快成固有的常识了&#xff0c;但是还有其它一些方法用于组织数据库。在类 Unix 操作系统上的文…

Blazor University (22)路由 —— 定义路由

原文链接&#xff1a;https://blazor-university.com/routing/路由与标准 ASP.NET MVC 一样&#xff0c;Blazor 路由是一种用于检查浏览器 URL 并将其匹配到要呈现的页面的技术。路由比简单地将 URL 匹配到页面更灵活。它允许我们根据文本模式进行匹配&#xff0c;例如&#xf…

Linux文件I/O编程(二)lseek函数

文件I/O编程处理open、read、write、close&#xff0c;等必要函数对文件进行读写操作外&#xff0c;lseek、fcntl也是I/O编程很重要的函数。lseek函数lseek函数主要用来移动当前读写位置&#xff0c;第一个参数是文件描述符fd&#xff0c;第二个参数是偏移距离&#xff0c;第三…

[python opencv 计算机视觉零基础到实战] 十九、简易绘画板制作

一、学习目标 了解事件编写一个简易绘画板 二、了解如何制作简易绘画板 2.1 了解鼠标多种事件 上一节我们简单的使用opencv的图形绘制方法&#xff0c;用鼠标绘制了一些内容。上一节所响应的是简单的双击事件EVENT_LBUTTONDBLCLK&#xff0c;在OpenCV的鼠标事件中还有很多。…