博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[ASP.NET Core] Static File Middleware
阅读量:5276 次
发布时间:2019-06-14

本文共 6287 字,大约阅读时间需要 20 分钟。

前言

本篇文章介绍ASP.NET Core里,用来处理静态档案的Middleware,为自己留个纪录也希望能帮助到有需要的开发人员。

结构

  • 一个Web站台最基本的功能,就是在接收到从「浏览器传入」的HTTP Request封包后,将站台内所提供的静态档案(Static File),封装成为「服务器回传」的HTTP Response封包内容,来提供给浏览器使用。

    结构01

  • 在ASP.NET Core里,内建了一个Middleware:StaticFileMiddleware,用来建立Web站台提供静态档案的功能。这个Middleware会先剖析HTTP Request封包中的URL路径、然后依照URL路径计算并取得对应的File路径下的档案内容、接着再将该档案内容封装为HTTP Response封包内容,用来提供给浏览器使用。

    结构02

  • 而在StaticFileMiddleware里,定义URL根路径、File根路径这两个系统参数,来映像URL路径所对应的File路径。用以提供开发人员,灵活的去设定URL路径与File路径之间的关系。

    开发01

    开发02

开发

Microsoft.AspNetCore.StaticFiles

在ASP.NET Core里,要加入StaticFileMiddleware来提供静态档案功能。开发人员可以先依照这篇文章里的步骤,来建立相关环境与基本程序代码。接着在project.json里挂载「Microsoft.AspNetCore.StaticFiles」的参考,后续就能使用这个参考里,所提供的StaticFileMiddleware相关对象。

{  "version": "1.0.0-*",  "buildOptions": {    "debugType": "portable",    "emitEntryPoint": true  },  "dependencies": {},  "frameworks": {    "netcoreapp1.0": {      "dependencies": {        "Microsoft.NETCore.App": {          "type": "platform",          "version": "1.0.0"        },        "Microsoft.AspNetCore.StaticFiles": "1.0.0",        "Microsoft.AspNetCore.Server.Kestrel": "1.0.0"      },      "imports": "dnxcore50"    }  }}

UseStaticFiles()

完成project.json的相关设定之后,就可以回过来修改「Program.cs」。在Microsoft.AspNetCore.StaticFiles里,提供了UseStaticFiles Extension,让开发人员可以方便的挂载StaticFileMiddleware。在下列的范例程序代码里,示范如何透过UseStaticFiles来挂载StaticFileMiddleware。(在StaticFileMiddleware里面,URL根路径默认为:「http://<Url>」、File根路径默认为:「file:\\<ContentRoot>\wwwroot」)。

开发01

开发02

using System;using System.IO;using Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.Hosting;using Microsoft.Extensions.FileProviders;namespace aspnetcoreapp{    public class Program    {        public static void Main(string[] args)        {            // Build            var host = new WebHostBuilder()                // 设定Host内容的File根路径                .UseContentRoot(Directory.GetCurrentDirectory())                // 设定启动参数                .UseStartup
() // 开启Kestrel聆听HTTP .UseKestrel() // 设定聆听的URL .UseUrls("http://localhost:5000") // 建立Host .Build(); // Run try { // 启动Host host.Start(); // 等待关闭 Console.WriteLine("Application started. Press any key to shut down."); Console.ReadKey(); } finally { // 关闭Host host.Dispose(); } } } public class Startup { // Methods public void Configure(IApplicationBuilder app) { // 挂载StaticFilesMiddleware app.UseStaticFiles(); } }}

UseWebRoot(webRoot)

在StaticFileMiddleware里面,File根路径默认为:「file:\\<ContentRoot>\wwwroot」。如果要变更默认的File根路径,开发人员可以使用ASP.NET Core所提供的UseWebRoot Extension来变更默认的File根路径。在下列的范例程序代码里,示范如何透过UseWebRoot来变更默认的File根路径。(范例执行时挂载的StaticFileMiddleware,URL根路径同样为:「http://<Url>」、File根路径变更为:「file:\\<CurrentDirectory>\aaa」)。

开发03

开发04

using System;using System.IO;using Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.Hosting;using Microsoft.Extensions.FileProviders;namespace aspnetcoreapp{    public class Program    {        public static void Main(string[] args)        {            // Build            var host = new WebHostBuilder()                // 设定Web站台的File根路径                .UseWebRoot(Directory.GetCurrentDirectory() + @"\aaa")                // 设定Host内容的File根路径                .UseContentRoot(Directory.GetCurrentDirectory())                // 设定启动参数                .UseStartup
() // 开启Kestrel聆听HTTP .UseKestrel() // 设定聆听的URL .UseUrls("http://localhost:5000") // 建立Host .Build(); // Run try { // 启动Host host.Start(); // 等待关闭 Console.WriteLine("Application started. Press any key to shut down."); Console.ReadKey(); } finally { // 关闭Host host.Dispose(); } } } public class Startup { // Methods public void Configure(IApplicationBuilder app) { // 挂载StaticFilesMiddleware app.UseStaticFiles(); } }}

UseStaticFiles(options)

除了使用预设参数挂载StaticFilesMiddleware之外,开发人员也可以使用自定义参数来挂载StaticFilesMiddleware。如果要使用自定义参数来挂载StaticFilesMiddleware,开发人员可以同样使用UseStaticFiles Extension来使用自定义参数挂载StaticFilesMiddleware。在下列的范例程序代码里,示范如何透过UseStaticFiles来挂载StaticFilesMiddleware,并且定义其URL根路径与File根路径。(范例执行时挂载的StaticFileMiddleware,URL根路径变更为:「http://<Url>/bbb」、File根路径变更为:「file:\\<CurrentDirectory>\ccc」)。

开发05

开发06

using System;using System.IO;using Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.Hosting;using Microsoft.Extensions.FileProviders;namespace aspnetcoreapp{    public class Program    {        public static void Main(string[] args)        {            // Build            var host = new WebHostBuilder()                // 设定Host内容的File根路径                .UseContentRoot(Directory.GetCurrentDirectory())                // 设定启动参数                .UseStartup
() // 开启Kestrel聆听HTTP .UseKestrel() // 设定聆听的URL .UseUrls("http://localhost:5000") // 建立Host .Build(); // Run try { // 启动Host host.Start(); // 等待关闭 Console.WriteLine("Application started. Press any key to shut down."); Console.ReadKey(); } finally { // 关闭Host host.Dispose(); } } } public class Startup { // Methods public void Configure(IApplicationBuilder app) { // 挂载StaticFilesMiddleware app.UseStaticFiles(new StaticFileOptions() { // 设定URL根路径 RequestPath = @"/bbb", // 设定File根目录 FileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory() + @"\ccc") }); } }}

参考

转载于:https://www.cnblogs.com/clark159/p/5984152.html

你可能感兴趣的文章
kindle 3快捷键
查看>>
在VS2013中打开Nuget
查看>>
web攻击几种方法
查看>>
hdu 4350 Card(递推循环节,3级)
查看>>
ajax的使用
查看>>
437.Path Sum III(递归!important!)
查看>>
jQuery找兄弟系列next(),nextAll(),nextUntil(),prev(),prevAll(),prevUntil(),siblings()
查看>>
IntelliJ IDEA的配置优化
查看>>
Day 1 用户交互
查看>>
P1903 [国家集训队]数颜色 / 维护队列
查看>>
【0805作业】模拟多人爬山
查看>>
window.setTimeout() 和 window.setInterval() 使用说明
查看>>
大数据组件
查看>>
ActionResult的其它返回值
查看>>
Mac零散小技巧
查看>>
#135. 二维树状数组 3:区间修改,区间查询
查看>>
Python--day6
查看>>
UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
查看>>
第六天
查看>>
js 格式化带时区的日期
查看>>