如何在 ASP.Net Core 中使用 File Providers

ASP.Net Core 为了便于获取文件和文件夹信息,监视文件变更, 在文件系统中提供了一个抽象层:File Providers, 这篇文章将会讨论如何使用 File Providers 。

File Provider 抽象层

file prodivers 实现了 IFileProvider 接口,它的实现子类大概有三块: Physical,EmbeddedComposite ,同时这个接口提供了可用于获取文件和文件夹的相关信息的方法,接口定义如下:

public interface IFileProvider{IDirectoryContents GetDirectoryContents(string subpath);IFileInfo GetFileInfo(string subpath);IChangeToken Watch(string filter);}

如果要实现 更改通知,还需要用 IChangeToken 接口,代码如下:

public interface IChangeToken{bool ActiveChangeCallbacks { get; }bool HasChanged { get; }IDisposable RegisterChangeCallback(Action<object> callback, object state);}

下面是 IFileProvider 接口的三个具体实现及应用,罗列如下:

  • PhysicalFileProvider

用于对 物理文件 的访问

  • EmbeddedFileProvider

用于对 程序集 内的文件访问

  • CompositeFileProvider

实现前面两者的混合访问

使用 PhysicalFileProvider

要想在 ASP.Net Core 中演示 PhysicalFileProvider,首先将其注入到 ServiceCollection 容器中,如下代码所示:

public void ConfigureServices(IServiceCollection services){services.AddControllersWithViews();IFileProvider physicalProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory());services.AddSingleton<IFileProvider>(physicalProvider);}

注入到容器后,现在就可以在 Controller 使用依赖注入获取实例了,如下代码所示:

public class HomeController : Controller{private readonly ILogger<HomeController> _logger;private readonly IFileProvider _fileProvider;public HomeController(ILogger<HomeController> logger, IFileProvider fileProvider){_logger = logger;this._fileProvider = fileProvider;}}

下面在 Index 方法中使用 GetDirectoryContents() 来获取当前项目文件夹下的所有文件,如下代码所示:

public IActionResult Index(){List<string> lst = new List<string>();var contents = _fileProvider.GetDirectoryContents("");foreach (IFileInfo fileInfo in contents){lst.Add(fileInfo.Name);}return View();}

使用 EmbeddedFileProvider

顾名思义,它就是用来访问注入到 程序集 中的文件,下面的代码展示了如何将 EmbeddedFileProvider 注入到 ASP.Net Core 的容器中,如下代码所示:

public void ConfigureServices(IServiceCollection services){services.AddControllersWithViews();IFileProvider embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly());services.AddSingleton<IFileProvider>(embeddedProvider);}

使用 CompositeFileProvider

看到 Composite 单词,是不是想起了设计模式中的 组合模式,对的,这里 CompositeFileProvider 也是类似的操作手法,它可以将一个或者多个的 EmbeddedFileProvider 和 PhysicalFileProvider 进行组合,进而合成一个  CompositeFileProvider 供上层进行访问,如果有点懵的话,可参考如下代码:


var physicalProvider = _env.ContentRootFileProvider;
var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly());
var compositeProvider = new CompositeFileProvider(physicalProvider, embeddedProvider);

总的来说,你可以利用 File Providers 来获取文件或文件夹的信息,同时也可以实现变更通知,如果想在 ASP.Net Core 中实现文件系统访问,可以通过依赖注入的方式按需使用你的 File Provider。

译文链接:https://www.infoworld.com/article/3307516/how-to-use-file-providers-in-aspnet-core.html

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

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

相关文章

2020年python2停止更新_Python核心团队计划2020年停止支持Python2,NumPy宣布停止支持计划表...

Python核心团队计划在2020年停止支持Python 2。NumPy项目自2010年以来一直支持Python 2和Python 3&#xff0c;并且发现支持Python 2对我们有限的资源增加了负担&#xff1b;因此&#xff0c;我们最终计划将停止支持Python 2。现在&#xff0c;我们已经进入了社区支持的Python …

对5种主流编程语言的吐槽

不可否认&#xff0c;想要成为一名优秀的程序员确实是需要掌握多种编程语言。通过这几年的自虐式学习&#xff0c;小编也慢慢的掌握了这些编程语言。接下来要为大家&#xff0c;介绍五款让人又爱又恨的编程语言&#xff01; 1.C 语言 C 语言给人的感觉&#xff0c;就是一位神秘…

python自动化测试脚本怎么编写_编写自动化测试脚本心得---菜鸟入门篇

编写自动化测试脚本心得 -------- 菜鸟入门篇 本文中将不会讲解 ISEE 的测试原理、不说明 Python 的常用语法、不介绍 OTP 测试平 台的架构&#xff0c; 自动化测试组的牛人们已经为我们编写了很多这些方面的资料&#xff0c; 而且我也怕学艺 不精说的不对&#xff0c; 因为 ……

c语言修改windows系统时间,c语言实现系统时间校正工具代码分享

//*******************************************************************//Time Protocol是一种非常简单的应用层协议。它返回一个未格式化的32位二进制数字,//这个数字描述了从1900年1月1日午夜到现在的秒数。服务器在端口37监听协议请求&#xff0c;以//TCP/IP或者UDP/IP格式…

WM中的OutLook开发和操作

昨天闲来无视&#xff0c;学习了一下WM的基本开发。看WM有约的那套教程心里痒痒&#xff0c;于是下载了SDK&#xff0c;看看DEMO&#xff0c;在Sample中的示例进行加工。小有一点心得。其实总的来说难度也不是很大&#xff0c;以前没有做过FORM的程序&#xff0c;都是WEB上面的…

苹果手机运行python_iPhone是卖的最好的手机?用Python照样把他玩弄鼓掌之间!

关于 iOS 的技术解读有很多&#xff0c;但是却鲜有设备可视化同步的介绍文章。本文一起了解下这个酷炫的 iOS 黑科技。我们的任务很简单——如上图所示&#xff0c;实时获取设备的当前方向。 UIDevice.current.orientation 首先&#xff0c;需要调用 beginGeneratingDeviceOrie…

这几个动图告诉你科学的神奇,看完瞬间觉得智商都提高了

生活中简单平常的事物和现象背后&#xff0c;往往有着奇妙的原理&#xff0c;赶快跟着一起来看看涨点知识吧&#xff01; 夹心雪糕的制作原理 ▼ 难怪雪糕大小&#xff0c;厚度都一模一样 原来都是从一个模子里出来的 ▼ 煎饼可以统一翻面 再也不用担心烤焦了 ▼ 冰淇淋蛋筒的制…

自定义 ocelot 中间件输出自定义错误信息

自定义 ocelot 中间件输出自定义错误信息Introocelot 中默认的 Response 中间件在出错的时候只会设置 StatusCode 没有具体的信息&#xff0c;想要展示自己定义的错误信息的时候就需要做一些自定义了&#xff0c;对 ocelot 中的 Response 中间件做了一些小改动&#xff0c;实现…

shapenet网络_GRNet网络:3D网格进行点云卷积,实现点云补全

Date&#xff1a;2020-11-23作者&#xff1a;三弟来源&#xff1a;GRNet网络&#xff1a;3D网格进行点云卷积&#xff0c;实现点云补全Gridding Residual Network for Dense Point Cloud Completion在点云分割方面&#xff0c;有一些方法尝试通过更通用的卷积操作来捕捉点云的空…

c语言随机数循环延迟,C语言生成随机数的函数、延时函数

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼下面C语言代码使用了生成随机数的函数、延时函数。请大家仔细观察其显示效果。从以下代码&#xff0c;我们可以得出一个重要的结论&#xff1a;当上述两类函数被放入循环时&#xff0c;应作出一定修改。同时还应关注其参数的定义位…

盘点小坏蛋的礼物

我们家小坏蛋一天天长大了&#xff0c;妈妈从觉得很辛苦过渡到习惯了很辛苦&#xff0c;苦中作乐的妈妈终于抽出空来写博客啦&#xff01; 为什么叫他小坏蛋呢&#xff1f;因为他吃饭不乖。没满月的时候蛮乖的&#xff0c;每顿奶都吃的很香&#xff0c;咕咚咕咚的喝下去&#x…

《笨办法学python》6_笨办法学Python 习题 25: 更多更多的练习

我们将做一些关于函数和变量的练习&#xff0c;以确认你真正掌握了这些知识。这节练习对你来说可以说是一本道:写程序&#xff0c;逐行研究&#xff0c;弄懂它。 不过这节练习还是有些不同&#xff0c;你不需要运行它&#xff0c;取而代之&#xff0c;你需要将它导入到 python …

为什么对gRPC做负载均衡会很棘手?

在过去的几年中&#xff0c;随着微服务的增长&#xff0c;gRPC在这些较小的服务之间的相互通信中获得了很大的普及,在后台&#xff0c;gRPC使用http/2在同一连接和双工流中复用许多请求。使用具有结构化数据的快速&#xff0c;轻便的二进制协议作为服务之间的通信介质确实很有吸…

给新手程序猿的16个必备小妙招

写在前面&#xff1a; 这个文章核心并不是程序优化的具体技巧&#xff0c;而是拿到一个问题如何思考和利用工具的通用方法。比如即使我们不知道 profiler 这个东西&#xff0c;通过搜索"代码 每一行 时间"也可以很快知道有这样的工具叫做 profiler&#xff0c;并且学…

openkruise 缩容_Linus 本尊也来了!为什么 KubeCon 越来越火了?

原标题&#xff1a;Linus 本尊也来了&#xff01;为什么 KubeCon 越来越火了&#xff1f;2015年11月&#xff0c;第一届 KubeCon 在美国旧金山开始的时候&#xff0c;还只是个200人的小会议&#xff0c;2019年的7月&#xff0c;KubeCon 第二次在中国举办&#xff0c;就有 3500 …

你可能不知道的C#语言特性

关键字 yield 通常用于迭代器中&#xff0c;向IEnumerable对象提供值或者结束迭代。 如&#xff1a; yield return expression; yield break; var 用于定义隐式类型的变量。 var i 5; var s "Hello"; 注意隐式类型&#xff08;Implicitly typed&#xff09;并不是…

c语言中文件如何插入数据,急求如何将下列C语言程序数据存储到文件中?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼求如何改动才能将下列程序的存储输入或输出数据(或两者一起)到指定的文件(或运行时直接创立一个文件)如Arrangement中。#include int n0;int rest[7][7]; //全局声明,以供全局调用int main(){void perm(int list[],int ,int );int …

python字符串设置字体_python怎么更改字符串后几位

python更改字符串后几位的方法&#xff1a;可以利用replace()函数来实现。replace()函数可以把字符串中的旧字符串替换成新字符串&#xff0c;并返回替换后的新字符串。具体使用方法如&#xff1a;【str.replace("is", "was")】。可以利用replace()函数来修…

使用 Tye 辅助开发 k8s 应用竟如此简单(二)

续上篇&#xff0c;这篇我们来进一步探索 Tye 更多的使用方法。本篇我们来了解一下如何在 Tye 中使用服务发现。服务发现 - 微服务开发不可缺少的部件 服务发现&#xff0c;就是新注册的这个服务模块能够及时的被其他调用者发现。不管是服务新增和服务删减都能实现自动发现。《…

程序猿的双十一最佳攻略

讲个恐怖故事 一年一度虐汪“光棍节”又来了 小天拍拍&#xff08;不存在的&#xff09;胸脯告诉大家 这个节日 我陪你们 买买买&#xff01; 限时特惠专场 1 welcome 7天教你学会数学建模及Matlab编程 数学建模涉及的内容比较广泛&#xff0c;比如碎纸片问题中所涉及的图像识…