.netcore中的虚拟文件EmbeddedFile
以前一直比较好奇像swagger,cap,skywalking等组件是如何实现引用一个dll即可在网页上展示界面的,难道这么多html,js,css等都是硬编码写死在代码文件中的?后面接触apb里面也有虚拟文件的功能,一直没去深入了解,最近仔细看了一下他们的代码,发现内部其实就是用嵌入式文件(EmbeddedFile)来实现的,在项目中将html,css,js等文件的属性修改为“嵌入的资源”。

此时编译后的dll就会包含这些数据文件,生成的嵌入式文件命名规则为:项目名称.物理路径1.物理路径2...文件名.扩展名,之后代码中可以通过当前项目的Assembly.GetManifestResourceInfo方法获取到这些文件,通过Assembly.GetManifestResourceNames方法可以获取到所有嵌入式资源
有了以上这些基础,如果我们想对外提供这些嵌入式文件的访问,只需要创建一个中间件,将请求的url转换成嵌入式资源的路径,获取对应的内容返回即可。例如swagger,cap,skywalking等各类组件自带的界面,就是在中间件中硬编码了url和相关嵌入式资源文件的映射关系,拦截到相关url后直接返回嵌入式资源文件,这样发布的组件就只需要dll即可,不再需要其它html,css,js文件了。
除了以上的自己通过中间件实现对嵌入式资源文件的访问外,.netcore中还内置了Microsoft.Extensions.FileProviders.EmbeddedFileProvider文件提供器,在调用UseStaticFiles时可以指定文件提供器,如下示例直接就可以对外提供这些嵌入式文件的访问了
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new EmbeddedFileProvider(typeof(Program).Assembly)
});
最后分享一个本人学习时写的一个虚拟文件系统,主要是参考学习了abp,swagger,.netcore的StaticFileMiddleware。其功能主要建立在UseStaticFiles之上,没有另外单独建立自己的中间件了,节约点代码和中间件吧,另外重写了EmbeddedFileProvider类,性能提升在4倍以上。具体使用方法参照VirtualFileSystem的readme
VirtualFileSystem: 虚拟文件系统,可用于支持嵌入式文件 (gitee.com)
.netcore中的虚拟文件EmbeddedFile的更多相关文章
- LINUX中的虚拟文件系统结构
我的博客:www.while0.com 以下以2.6.32版本的内核源码为例: 虚拟文件系统与具体文件系统之间是几组操作函数的对应,包括file_operations,dentry_operation ...
- kbmmw 中虚拟文件操作入门
kbmmw 中一直有一个功能,但是基本上都没有提过,但是在实际应用中,却非常有用,这个功能就是 虚拟文件包功能,他可以把一大堆文件保存到一个文件里面,方便后台管理. kbmmw 的虚拟文件在单元kbm ...
- 在Win7中IIS配置Asp.Net虚拟文件夹的方法及错误总结!
在Win7中IIS配置Asp.Net虚拟文件夹的方法总结! 一.右键[站点].点击[加入虚拟文件夹]或[虚拟应用程序],笔者建议最好建立虚拟应用程序,由于这就跟一个站点差点儿相同.不用考虑路径问题. ...
- netcore中的缓存介绍
Cache(缓存)是优化web应用的常用方法,缓存存放在服务端的内存中,被所有用户共享.由于Cache存放在服务器的内存中,所以用户获取缓存资源的速度远比从服务器硬盘中获取快,但是从资源占有的角度考虑 ...
- Visual Studio(VS2012) Project&(Solution) 虚拟文件夹 & 物理文件夹
今天发生个怪事:在 Solution Explorer 中,x project 内建立文件夹(folder)时,同时在磁盘目录下也创建了同名的文件夹. 1, 原本:应该只是创建一个“虚拟文件夹”用来“ ...
- 如何保护.net中的dll文件(防破解、反编译)
如何保护.net中的dll文件(防破解.反编译) 2010-07-19 15:08 [小 大] 来源: 赛迪网 评论: 0 分享至: 百度权重查询 词库网 网站监控 服务器监控 SEO监控 ...
- XCODE中的蓝色文件夹与黄色文件夹
XCODE中的蓝色文件夹与黄色文件夹 黄色文件夹比较常见 - group , 在XCODE中以文件夹的形式存在,有层次感,但是实际文件在工程下是散乱的,没有层级结构.是XCODE中虚拟目录. 蓝色文件 ...
- VMware虚拟机中的常用文件介绍
虚拟机的文件管理由VMware Workstation来执行.一个虚拟机一般以一系列文件的形式储存在宿主机中,这些文件一般在由workstation为虚拟机所创建的那个目录中. 如下图所示:(< ...
- 在/proc文件系统中增加一个目录hello,并在这个目录中增加一个文件world,文件的内容为hello world
一.题目 编写一个内核模块,在/proc文件系统中增加一个目录hello,并在这个目录中增加一个文件world,文件的内容为hello world.内核版本要求2.6.18 二.实验环境 物理主机:w ...
- 在Apache中开启虚拟主机
最近在自学LAMP,在Apache中尝试着开启虚拟主机的时候,遇到了挺多麻烦的,这里也顺便总结一下,在Apache中开启虚拟主机的时候,主要有下面几个步骤: 1.新建一个文件夹作为虚拟主机,用来存储网 ...
随机推荐
- Kafka 消费者读取数据
消费者不需要自行管理 offset(分组+topic+分区),系统通过 broker 将 offset 存放在本地.低版本通过 zk 自行管理.系统自行管理分区和副本情况.消费者断线后会自动根据上一次 ...
- Mybatis应用手册
重学mybatis框架,汇成应用手册,整理mybatis中用法且附相关实例,方便日常回顾 目录结构: ----------------- Github手册地址:https://github.com/x ...
- 安全测试之探索 windows 游戏扫雷
作者:京东工业 宛煜昕 扫雷游戏相信很多人都从小玩过,在那个电脑游戏并不多的时代,扫雷成为玩的热度蛮高的一款游戏之一,然而就在有一次,接触到了一次不寻常的扫雷过程,使得后来我也有了这个冲动,也来做一次 ...
- VUE中的next({ ...to, replace: true })
beforeEach((to, from, next) => { next('/logon') } 上面这串代码我们可以看成为 beforeEach((to, from, next) => ...
- VUE零碎小技巧1
1.回顾 创建项目 vue create myapp 准备 scss 库 修改了页面的主结构 App.vue 构建页面的基本结构 分离页面主结构,创建各个页面组件 views views/home/i ...
- Oracle_数据泵
Oracle数据泵导入.导出数据 expdp导出 运行CMD 登录数据库,输入sqlplus 使用管理员角色登录需要在用户名后加" as sysdba" 例如:sys as sys ...
- JUC(六)堵塞队列与线程池
堵塞队列 简介 def:在多线程中实现高效.安全的数据传输,主要是通过一个共享的队列,使得数据能够从一端输入,从另一端输出 当队列是空的,取数据的线程就会被堵塞,直到其他线程往空的队列中添加数据 当队 ...
- ubuntu容器的远程xface桌面环境搭建
一.container: ubuntu20.04 二.commands: apt install xfce4 tigervnc-standalone-server # xface使用gdm3启动器 ...
- 实时分布式低延迟OLAP数据库Apache Pinot探索实操
@ 目录 概述 定义 特性 何时使用 部署 Local安装 快速启动 手动设置集群 Docker安装 快速启动 手动启动集群 Docker Compose 实操 批导入数据 流式导入数据 概述 定义 ...
- MySQL InnoDB Architecture 简要介绍
MySQL InnoDB 存储引擎整体架构图: 一.内存存储结构 1.Buffer Pool buffer pool 是主内存中的一块儿存储区域,用于存储访问的表及索引数据.这样从内存中直接访问获取使 ...