加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

浅谈ASP.NET Core静态文件处理源码探究

发布时间:2020-08-22 03:54:04 所属栏目:编程 来源:网络整理
导读:这篇文章首要先容了浅谈ASP.NET Core静态文件处理赏罚源码探讨,文中通过示例代码先容的很是具体,对各人的进修可能事变具有必然的参考进修代价,必要的伴侣们下面随
副问题[/!--empirenews.page--]

静态文件(如 HTML、CSS、图像和 JavaScript)等是Web措施的重要构成部门。传统的ASP.NET项目一样平常都是陈设在IIS上,IIS是一个成果很是强盛的处事器平台,可以直接处理赏罚吸取到的静态文件处理赏罚而不必要颠末应用措施池处理赏罚,以是许多环境下对付静态文件的处理赏罚措施自己是无感知的。ASP.NET Core则差异,作为Server的Kestrel处事是宿主到措施上的,由宿主运行措施启动Server然后可以监听哀求,以是通过措施我们直接可以处理赏罚静态文件相干。静态文件默认存储到项目标wwwroot目次中,虽然我们也可以自界说恣意目次行止理赏罚静态文件。总之,在ASP.NET Core我们可以处理赏罚静态文件相干的哀求。

StaticFile三剑客

凡是我们在说道静态文件相干的时辰会涉及到三个话题别离是启用静态文件、默认静态页面、静态文件目次赏识,在ASP.NET Core别离是通过UseStaticFiles、UseDefaultFiles、UseDirectoryBrowser三此中间件行止理赏罚。只有设置了相干中间件才气去操纵对应的处理赏罚,信托各人对这种操纵已经很熟了。静态文件操纵相干的源码都位于GitHub aspnetcore客栈中的https://github.com/dotnet/aspnetcore/tree/v3.1.6/src/Middleware/StaticFiles/src目次。接下来我们别离探讨这三此中间件的相干代码,来揭开静态文件处理赏罚的隐秘面纱。

UseStaticFiles

UseStaticFiles中间件使我们处理赏罚静态文件时最常行使的中间件,由于只有开启了这此中间件我们才气行使静态文件,好比在行使MVC开拓的时辰必要私用js css html等文件都必要用到它,行使的方法也较量简朴

//行使默认路径,即wwwroot app.UseStaticFiles(); //或自界说读取路径 var fileProvider = new PhysicalFileProvider($"{env.ContentRootPath}/staticfiles"); app.UseStaticFiles(new StaticFileOptions { RequestPath="/staticfiles", FileProvider = fileProvider });

我们直接找到中间件的注册类StaticFileExtensions[点击查察StaticFileExtensions源码]

public static class StaticFileExtensions { public static IApplicationBuilder UseStaticFiles(this IApplicationBuilder app) { return app.UseMiddleware<StaticFileMiddleware>(); } public static IApplicationBuilder UseStaticFiles(this IApplicationBuilder app, string requestPath) { return app.UseStaticFiles(new StaticFileOptions { RequestPath = new PathString(requestPath) }); } public static IApplicationBuilder UseStaticFiles(this IApplicationBuilder app, StaticFileOptions options) { return app.UseMiddleware<StaticFileMiddleware>(Options.Create(options)); } }

一样平常我们最常用到的是无参的方法和转达自界说StaticFileOptions的方法较量多,StaticFileOptions是自界说行使静态文件时的设置信息类,接下来我们大抵看一下详细包括哪些设置项[点击查察StaticFileOptions源码]

public class StaticFileOptions : SharedOptionsBase { public StaticFileOptions() : this(new SharedOptions()) { } public StaticFileOptions(SharedOptions sharedOptions) : base(sharedOptions) { OnPrepareResponse = _ => { }; } /// <summary> /// 文件范例提供措施,也就是我们常用的文件名对应MimeType的对应相关 /// </summary> public IContentTypeProvider ContentTypeProvider { get; set; } /// <summary> /// 配置该路径下默认文件输出范例 /// </summary> public string DefaultContentType { get; set; } public bool ServeUnknownFileTypes { get; set; } /// <summary> /// 文件压缩方法 /// </summary> public HttpsCompressionMode HttpsCompression { get; set; } = HttpsCompressionMode.Compress; /// <summary> /// 筹备输出之前可以做一些自界说操纵 /// </summary> public Action<StaticFileResponseContext> OnPrepareResponse { get; set; } } public abstract class SharedOptionsBase { protected SharedOptionsBase(SharedOptions sharedOptions) { SharedOptions = sharedOptions; } protected SharedOptions SharedOptions { get; private set; } /// <summary> /// 哀求路径 /// </summary> public PathString RequestPath { get { return SharedOptions.RequestPath; } set { SharedOptions.RequestPath = value; } } /// <summary> /// 文件提供措施,在.NET Core中假如必要会见文件相干操纵可行使FileProvider文件提供措施获取文件相干信息 /// </summary> public IFileProvider FileProvider { get { return SharedOptions.FileProvider; } set { SharedOptions.FileProvider = value; } } }

我们自界说静态文件会见时,最常用到的就是RequestPath和FileProvider,一个配置哀求路径信息,一个配置读取文件信息。假如必要自界说MimeType映射相关可通过ContentTypeProvider自界说配置映射相关

var provider = new FileExtensionContentTypeProvider(); provider.Mappings[".myapp"] = "application/x-msdownload"; provider.Mappings[".htm3"] = "text/html"; app.UseStaticFiles(new StaticFileOptions { ContentTypeProvider = provider, //可以在输出之前配置输出相干 OnPrepareResponse = ctx => { ctx.Context.Response.Headers.Append("Cache-Control", $"public, max-age=3600"); } });

接下来我们步入正题直接查察StaticFileMiddleware中间件的代码[点击查察StaticFileMiddleware源码]

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读