开源博客项目Blog的App.Hosting项目为MVC架构的,主要定义或保存博客网站前台内容显示页面及后台数据管理页面相关的控制器类、页面、js/css/images文件,页面使用基于layui的Razor页面(最早学习本项目就是想学习layui的用法,不过最新版本中前台页面换成了Vue3),同时定义项目所需的特性类、中间件等。
App.Hosting项目依赖App.Application项目,同时其安装的Nuget包不多,仅包括Microsoft.AspNetCore.Mvc.Newtonsoft、Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation、Microsoft.VisualStudio.Azure.Containers.Tools.Targets
App.Core项目的顶层文件夹如下图所示,下面逐一概述其大致用途。
Program.cs。项目的初始启动文件,初始化自动注入、数据库配置、数据映射、数据验证、数据缓存、Session设置、Cookie设置、中间件、路由等方面的设置。
log4net.config。日志记录模块log4net的配置文件,配置记录日志的层级、格式、输出位置等信息。
appsettings.json。项目配置文件,配置数据库连接信息、缓存设置等信息。
wwwroot文件夹。保存前后台页面所需的css、js、图片等文件,其结构如下图所示,layui相关的文件即保存在其中的js文件夹中。
Areas文件夹。其下级结构如下所示,保存的是博客项目的后台数据管理(博客管理、用户管理、角色及权限管理等模块)相关的控制器类及页面,后续会逐一学习并记录各个模块的页面及后台控制器类的具体用法,本文中不再详细介绍。
Controllers及Views文件夹。保存前台页面(网站首页、文章专栏、资源分享、点点滴滴、关于本站)相关的控制器类及页面,后续会逐一学习并记录的前台页面及后台控制器类的具体用法,本文中不再详细介绍。
Middleware文件夹。保存异常处理中间件ExceptionHandlerMiddleware,该类尝试调用管道中的下一个代理或中间件,失败的话则记录日志,返回异常JSON或直接调转到错误页;
Extensions文件夹。其中的ApplicationBuilderExtensions类定义函数在项目启动时注册异常处理中间件,而HttpContextExtensions类则定义扩展函数支持从请求数据中获取Session数据、设置用户登录/登出信息等操作。
Filters文件夹。其下级结构如下图所示,其中:
WebController类为前台页面对应的控制器类的抽象基类,提供统一的对象实例序列化为Json的操作函数;
AdminController为博客项目的后台数据管理相关模块的控制器类的抽象基类,定义了相关的页面处理及错误处理函数;
AuthorizationAttribute类和AllowAccessAttribute类用于检验用户登录和权限验证,主要用于后台数据管理相关模块的控制器类函数的权限控制,如果函数没有设置AllowAccess特性,则需按AuthorizationAttribute类中的权限验证规则进行权限验证,通过验证才能访问对应函数。
Models文件夹。保存前台“点点滴滴”页面显示数据所需的时间轴(TimeLineDto)和事件(LineItem)数据类定义。
参考文献:
[1]https://gitee.com/miss_you/Blog
[2]https://www.donet5.com/Home/Doc
[3]https://github.com/MapsterMapper/Mapster
[4]https://github.com/rivenfx/Mapster-docs