.netcore中的虚拟文件EmbeddedFile

这篇具有很好参考价值的文章主要介绍了.netcore中的虚拟文件EmbeddedFile。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

.netcore中的虚拟文件EmbeddedFile

 此时编译后的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)
            });

 文章来源地址https://www.toymoban.com/news/detail-475341.html

最后分享一个本人学习时写的一个虚拟文件系统,主要是参考学习了abp,swagger,.netcore的StaticFileMiddleware。其功能主要建立在UseStaticFiles之上,没有另外单独建立自己的中间件了,节约点代码和中间件吧,另外重写了EmbeddedFileProvider类,性能提升在4倍以上。具体使用方法参照VirtualFileSystem的readme

VirtualFileSystem: 虚拟文件系统,可用于支持嵌入式文件 (gitee.com)

 

到了这里,关于.netcore中的虚拟文件EmbeddedFile的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • .netCore后台将数据生成为PDF文件

    几种常见的操作文档的方式 OLEDB         把整个 Excel 文件当做一个数据源来进行数据的读取操作。 优点:实现方式简单,读取速度快。 缺点:读取 Excel 数据的过程不太灵活,对内存的占用比较高,当数据量变的很大时,容易由于内存空间不足导致内存溢出异常。 COM 组

    2024年02月16日
    浏览(40)
  • .netcore grpc的proto文件字段详解

    grpc的接口传输参数都是根据.proto文件约定的字段格式进行传输的 grpc提供了多种类型字段;主要包括标量值类型(基础类型)、日期时间、可为null类型、字节、列表、字典、Any类型(任意类型)、Oneof等 字段严格规范,是一种强类型文件协议 标量值类型 日期时间 可为null类

    2024年02月12日
    浏览(39)
  • vscode连不上虚拟机,一直密码错误

    最近在做毕设,但是vscode使用连接不上虚拟机,我以为是网络配置的问题,一顿查阅没找到原因。 后来查了一下ssh的日志,发现ssh有消息,但是也提示密码错误。 没找到密码配置格式什么的,经查看sshd配置文件发现,原来是只允许秘钥登录,把prohibit-password修改为yes即可

    2024年01月23日
    浏览(43)
  • 虚拟机进不去登陆界面一直转圈

    说明:我的出现的问题是防火墙未关闭 问题示例:虚拟机进不去,如图: 解决方法:在下图界面 点击e 进入内核 点击向下方向键找到linux16,在最后先 空格 再补充 selinux=0 (意思为关闭selinux) 输入完毕后点击ctrl+x,系统就会进行启动 再永久关闭CentOS系统防火墙,禁用SELINU

    2023年04月08日
    浏览(56)
  • 开源.NetCore通用工具库Xmtool使用连载 - OSS文件上传篇

    《上一篇》 介绍了Xmtool工具库中的图像处理类库,今天我们继续为大家介绍其中的OSS文件上传类库。 将本地文件上传到服务器是软件系统经常会遇到的需求,例如:设置用户头像,上传Excel报表等等;涉及到网络访问性能、存储空间等因素的考虑,通常我们会选择使用第三方

    2024年02月19日
    浏览(35)
  • VMware虚拟机中的Linux重启后共享文件夹失效的解决方法

    重启虚拟机之后,发现在共享路径没有显示我的共享文件夹了。         我发现我虚拟机设置的共享文件夹总是启用的,为什么每次重启之后都找不到了呢?这就很奇怪 发现用命令检查共享文件夹是有被挂载的。  三、修改/etc/rc.local文件 如果/etc/rc.local是空文件就添加如下

    2024年02月10日
    浏览(87)
  • 解决问题:Anaconda安装在D盘,新创建的虚拟环境一直在C盘的问

    下载安装anaconda时,为了不占用C盘空间,我选择安装路径在D盘,但是新建的虚拟环境总是在C盘中的用户目录下,如下图-1所示,尝试解决了很多次,将最终我的解决方法分享一下,希望对您有所帮助 图--1  接下来我的解决办法如下:(我的电脑是win11系统,anaconda是2023.9版本

    2024年02月04日
    浏览(50)
  • ensp路由器和防火墙usg6000v一直#的问题,虚拟机蓝屏问题

    一、根据官方文档查找后路由器还报41错误解决思路: 1.关闭防火墙 2.以管理员身份运行cmd,输入bcdedit /set hypervisorlaunchtype off (win10不管是专业版还是家庭版都这样做),重启电脑 二、根据官方文档查找后路由器还一直#号解决思路: 1.关闭防火墙 2.检查ensp所用的网卡是否和其

    2024年02月07日
    浏览(48)
  • hyper-v虚拟机安装homessistant出现一直卡在准备界面该怎么解决,跪求大神帮助

    23-01-11 07:54:33 INFO (SyncWorker_2) [supervisor.docker.interface] Updating image ghcr.io/home-assistant/qemux86-64-homeassistant:landingpage to ghcr.io/home-assistant/qemux86-64-homeassistant:2023.1.2 23-01-11 07:54:33 INFO (SyncWorker_2) [supervisor.docker.interface] Downloading docker image ghcr.io/home-assistant/qemux86-64-homeassistant with tag 2023.1.

    2024年02月12日
    浏览(46)
  • Junit4 一直处于运行中的排查过程

    新买了一个Macbook Pro . 之前的工程搬家过来, 这天要跑个单元测试。 发现Junit4 一直处于运行中。没有错误信息,没有用例执行结果。遂开始排查原因。 这里插一句,苹果芯片的Mbp还是很好用的,除了性能够用之外,最主要是安静+不热。 这对比我之前的i7版本的真是太明显了

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包