ASP.NET Core搭建多层网站架构【1-项目结构分层建立】
2020/01/26, ASP.NET Core 3.1, VS2019
摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【1-项目结构分层建立】
本章节介绍了本项目的分层结构,建立了各层级的类库,修改网站项目的启动配置
新建解决方案
- 新建空白解决方案
MSDemo
- 建立以下解决方案文件夹:
一个解决方案文件夹相当于一个层级,解决方案下是src
和tests
。而src
下分了七个层级,并且每个层级向上依赖,不会出现2.WebCore
中的内容依赖5.Model
中的内容。
下面在每个层级中新建类库或应用程序,简单介绍每个层级的作用。
层级介绍
1.Common
中主要放置一些公共的基础库(例如雪花算法、扩展方法等)
2.WebCore
中是网站数据库实体类、网站核心配置(例如跨域配置、多语言配置等)
3.DbAccess
中是数据库实体类映射配置、封装工作单元仓储设计类库
4.Component
中放置一些Web组件,例如Aop动态代理、Jwt授权验证等
5.Model
中放置Automapper的映射配置、ViewModel、DTO等内容
6.Business
主要是业务内容
7.WebHost
就是WebApi所在层级
说明:
- 6、7之间也可以多加一层Middleware中间件层级(如有需要的话)
- WebHost不仅仅可以放WebApi,一样可以放置WebMVC网站
- 主要思路是想遵循严格的下级依赖上级,分层层次清晰易于理解,各层级职责明确
- 为什么有Component这一层?这一层里的内容其实和中间件很类似,但是按我的设计是可替换的,例如Jwt组件,如果不用Jwt,可以不加上去。而中间件内的东西是与网站强相关的
src项目建立
在解决方案所在文件夹下,建立src
文件夹,src下所有项目都放在这个路径下。
类库配置如下图,后面几个类库除了名字不同,都是一样的路径:
在1.Common
中新建.NET Core类库,取名为MS.Common,一些公用的基础方法就封装在这里面。
在2.WebCore
中新建.NET Core类库,取名为MS.Entities,里面存放数据库实体类
在2.WebCore
中新建.NET Core类库,取名为MS.WebCore,里面存放网站核心的一些配置,依赖MS.Common项目
在3.DbAccess
中新建.NET Core类库,取名为MS.UnitOfWork,里面是工作单元与仓储设计
在3.DbAccess
中新建.NET Core类库,取名为MS.DbContexts,里面存放实体类映射配置和数据库上下文,依赖MS.Entities、MS.UnitOfWork项目
在4.Component
中新建.NET Core类库,取名为MS.Component.Aop,实现Aop动态代理,依赖MS.WebCore项目
在4.Component
中新建.NET Core类库,取名为MS.Component.Jwt,实现Jwt验证授权,依赖MS.WebCore、MS.Entities两个项目
在5.Model
中新建.NET Core类库,取名为MS.Models,实现存放AutoMapper映射配置、ViewModel和DTO,依赖MS.Component.Jwt、MS.DbContexts两个项目
在6.Business
中新建.NET Core类库,取名为MS.Services,是主要的业务实现,依赖MS.Models项目
在7.WebHost
中新建ASP.NET Core Web应用程序,取名为MS.WebApi,取消HTTPS配置,依赖MS.Services、MS.Component.Aop两个项目
将MS.WebApi网站设为项目启动项
建立完成后,解决方案如下图:
十个项目都是.NET Core 3.1目标框架,并且十个项目都在src文件夹中:
编辑网站启动配置
打开MS.WebApi
-Properties
-launchSettings.json
文件,编辑网站启动配置:
删除IIS Express节点配置,并将MS.WebApi节点中,launchBrowser值改为false,此时,网站项目将使用Kestrel内核启动,不使用IIS Express,不启动浏览器,仅有个控制台程序:
打开Postman,New Collection
-输入名称MSDemo
在MSDemo
Collection中Add Requst,名称填写weatherforecast,添加完成后,输入URL:http://localhost:5000/weatherforecast后回车:
可以看到请求成功。
总结
使用Kestrel内核启动Web服务器,而不是使用IIS Express,关于这两种托管模式,可以看老张的哲学出品的ASP.NET Core 学习视频教程,P4-两种托管模式(注意是第四P)
在使用Postman过程中,建立了Collection,再在Collection中Add Requst请求,为的是:
- 方便一个项目的请求都在一个集合中
- 后期会添加授权验证,用户登录后,会得到一个Token,之后的请求中,都要附带上Token,使用Collection后,用户登录完成,把Token加入到Collection,则Collection中每个请求都会自动附带上该Token
ASP.NET Core搭建多层网站架构【1-项目结构分层建立】的更多相关文章
- ASP.NET Core搭建多层网站架构【0-前言】
2020/01/26, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构 目录 0-前言 1-项目结构分层建立 2-公共基 ...
- ASP.NET Core搭建多层网站架构【2-公共基础库】
2020/01/28, ASP.NET Core 3.1, VS2019,Newtonsoft.Json 12.0.3, Microsoft.AspNetCore.Cryptography.KeyDe ...
- ASP.NET Core搭建多层网站架构【3-xUnit单元测试之简单方法测试】
2020/01/28, ASP.NET Core 3.1, VS2019, xUnit 2.4.0 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[3-xUnit单元测试 ...
- ASP.NET Core搭建多层网站架构【4-工作单元和仓储设计】
2020/01/28, ASP.NET Core 3.1, VS2019, Microsoft.EntityFrameworkCore.Relational 3.1.1 摘要:基于ASP.NET Co ...
- ASP.NET Core搭建多层网站架构【5-网站数据库实体设计及映射配置】
2020/01/29, ASP.NET Core 3.1, VS2019, EntityFrameworkCore 3.1.1, Microsoft.Extensions.Logging.Consol ...
- ASP.NET Core搭建多层网站架构【6-注册跨域、网站核心配置】
2020/01/29, ASP.NET Core 3.1, VS2019, NLog.Web.AspNetCore 4.9.0 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站 ...
- ASP.NET Core搭建多层网站架构【7-使用NLog日志记录器】
2020/01/29, ASP.NET Core 3.1, VS2019, NLog.Web.AspNetCore 4.9.0 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站 ...
- ASP.NET Core搭建多层网站架构【8.1-使用ViewModel注解验证】
2020/01/29, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[8.1-使用ViewModel注解验证] 使用V ...
- ASP.NET Core搭建多层网站架构【8.2-使用AutoMapper映射实体对象】
2020/01/29, ASP.NET Core 3.1, VS2019, AutoMapper.Extensions.Microsoft.DependencyInjection 7.0.0 摘要:基 ...
随机推荐
- 在Vue中输入框自动获取焦点的三种方式
原生JS操作DOM使用mounted钩子函数,它表示页面一加载进来就执行函数里面的内容(和window.onload类似)1//html部分 编号:<input type="text& ...
- 【转】git rebase详解
git合并代码方式主要有两种方式,分别为:1.merge处理,这是大家比较能理解的方式.2.rebase处理,中文此处翻译为衍合过程. git rebase操作讲解例子: cd /usr/local/ ...
- Android 获取手机的厂商、型号、Android系统版本号等工具类(转载)
Android 获取手机的厂商.型号.Android系统版本号等工具类 1.获取手机制造厂商 2.获取手机型号 3.获取手机系统当前使用的语言 4.获取Android系统版本号 5.获取手机IMEI串 ...
- 每天进步一点点------CRC码的FPGA实现
一.CRC码的FPGA实现之一CRC的原理 实验目的 学习用FPGA设计一个数据通信中常用的数据检错模块——循环冗余检验CRC模块,熟悉理解CRC的检错原理. 实验原理 循环冗余检验(CRC)算法原理 ...
- mvc:annotation-driven的前缀 "mvc"未绑定
缺少MVC的配置,正确配置如下: <beans xmlns="http://www.springframework.org/schema/beans" xmlns ...
- codeforces 962F.simple cycle(tarjan/点双连通分量)
题目连接:http://codeforces.com/contest/962/problem/F 题目大意是定义一个simple cycle为从一个节点开始绕环走一遍能经过simple cycle内任 ...
- redis哈希操作
用户可以通过执行hset命令为哈希中的指定字段设置值: 127.0.0.1:6379> hset hash field value 根据给定的字段是否存在于散列中,hset命令的行为也会有所不同 ...
- 洛谷P1044栈(DP)
题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即poppoppop(从栈顶弹出一个元素)和pushpushpush(将一个元素进栈) ...
- 【PAT甲级】1108 Finding Average (20分)
题意: 输入一个正整数N(<=100),接着输入一行N组字符串,表示一个数字,如果这个数字大于1000或者小于1000或者小数点后超过两位或者压根不是数字均为非法,计算合法数字的平均数. tri ...
- 插入数据:insert,replace
*insert高级用法* 1.语法:insert into tbname(字段列表) values 值列表; 1.1可以不将所有的字段都插入数据.如果说需要完成部分字段的插入,需要必须存在字段列表. ...