• Static File Middleware


    [ASP.NET Core] Static File Middleware

     

    前言

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

    结构

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

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

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

    开发

    Microsoft.AspNetCore.StaticFiles

    在ASP.NET Core里,要加入StaticFileMiddleware来提供静态档案功能。开发人员可以先依照[ASP.NET Core] Getting Started这篇文章里的步骤,来建立相关环境与基本程序代码。接着在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」)。

    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<Startup>()
    
                    // 开启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」)。

    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<Startup>()
    
                    // 开启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」)。

    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<Startup>()
    
                    // 开启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")
                });
            }
        }
    }
    

    参考

  • 相关阅读:
    Effective C++ 33 避免遮掩继承而来的名称
    求子数组之和的最大值——编程之美 2.14 扩展问题 正确实现
    数据结构快速回顾——平衡二叉树 AVL (转)
    位运算符 优先级 折半搜索
    关于 二维数组指针
    C++中的单例模式(转)
    C# ThreadStart和ParameterizedThreadStart区别
    C# 实现数字字符串左补齐0的两种方法
    C# 窗口自适应窗口宽度和高度
    C# 在多线程环境中,进行安全遍历操作
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/5988546.html
Copyright © 2020-2023  润新知