前言

本篇文章介绍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")
});
}
}
}

参考

[ASP.NET Core] Static File Middleware的更多相关文章

  1. Static File Middleware

    [ASP.NET Core] Static File Middleware   前言 本篇文章介绍ASP.NET Core里,用来处理静态档案的Middleware,为自己留个纪录也希望能帮助到有需要 ...

  2. [转帖]ASP.NET Core 中间件(Middleware)详解

    ASP.NET Core 中间件(Middleware)详解   本文为官方文档译文,官方文档现已非机器翻译 https://docs.microsoft.com/zh-cn/aspnet/core/ ...

  3. [转]ASP.NET Core: Static Files cache control using HTTP Headers

    本文转自:https://www.ryadel.com/en/asp-net-core-static-files-cache-control-using-http-headers/ Every sea ...

  4. ASP.NET Core 开发-中间件(Middleware)

    ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组 ...

  5. ASP.NET Core 中间件(Middleware)详解

    什么是中间件(Middleware)? 中间件是组装到应用程序管道中以处理请求和响应的软件. 每个组件: 选择是否将请求传递给管道中的下一个组件. 可以在调用管道中的下一个组件之前和之后执行工作. 请 ...

  6. 如何传递参数给ASP.NET Core的中间件(Middleware)

    问题描述 当我们在ASP.NET Core中定义和使用中间件(Middleware)的时候,有什么好的办法可以给中间件传参数吗? 解决方案 在ASP.NET Core项目中添加一个POCO类来传递参数 ...

  7. 理解ASP.NET Core - 文件服务器(File Server)

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 提供静态文件 静态文件默认存放在 Web根目录(Web Root) 中,路径为 项目根目录(C ...

  8. ASP.NET Core 中间件(Middleware)(一)

    本文主要目标:记录Middleware的运行原理流程,并绘制流程图. 目录结构: 1.运行环境 2.Demo实践 3.源码追踪 4.AspnetCore内置middleware 一.运行环境 Visu ...

  9. asp.net core 使用html文件

    在asp.net core 项目中,使用html文件一般通过使用中间件来提供服务: 打开 NuGet程序管理控制台 输入install-package Microsoft.aspnetcore.sta ...

随机推荐

  1. php单条件查询,关键字查询

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. CI Weekly #3 | 关于微服务、Docker 实践与 DevOps 指南

    CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...

  3. VMWare vSphere Client 克隆虚拟机 更改IP

    克隆虚拟机后,查看该虚拟机所分配的MAC地址. 打开控制台,进入linux界面. 打开/etc/udev/rules.d/70-persistent-net.rules内容如下面例子所示: # vi ...

  4. DataGrid中的事件和方法

    事件: onLoadSuccess:数据加载成功的时候触发. onLoadError:在载入远程数据产生错误的时候触发. onClickCell:在用户点击一个单元格的时候触发. onDblClick ...

  5. 通知:逆天异常库 V1.0版本支持下载了~~

    百度网盘:http://pan.baidu.com/s/1bongheJ GitHub:https://github.com/dunitian/LoTDotNet

  6. Sql Server系列:数据库组成及系统数据库

    1. 数据库组成 数据库的存储结构分为逻辑存储结构和物理存储结构. ◊ 逻辑存储结构:说明数据库是由哪些性质的信息所组成.SQL Server的数据库不仅仅只是数据的存储,所有与数据处理操作相关的信息 ...

  7. Panorama和Pivot的区别

    Panorama 1.提供了更丰富的用户体验(建议最多4个Items项) 2.Item可以设置屏幕方向为水平,支持多于一个屏幕的显示 3.可以使用任意大小的背景图片,Panorama会自动地缩放为屏幕 ...

  8. Android中Path类的lineTo方法和quadTo方法画线的区别

    转载:http://blog.csdn.net/stevenhu_223/article/details/9229337 当我们需要在屏幕上形成画线时,Path类的应用是必不可少的,而Path类的li ...

  9. spring websocket源码分析续Handler的使用

    1. handler的定义 spring websocket支持的消息有以下几种: 对消息的处理就使用了Handler模式,抽象handler类AbstractWebSocketHandler.jav ...

  10. Linux添加用户(user)到用户组(group)

    将一个用户添加到用户组中,千万不能直接用: usermod -G groupA 这样做会使你离开其他用户组,仅仅做为 这个用户组 groupA 的成员. 应该用 加上 -a 选项: usermod - ...