静态文件(css,js,html等类型文件)通常位于 web根目录下,而ASP.Net Core框架默认内容根目录下的wwwroot文件夹为web根目录。这里简单解释下内容根目录:实际就是指包含可执行程序exe,程序集dll,配置文件json,xml等的文件目录.

1.访问web根目录静态文件

正常情况下,静态文件是无法直接访问的,需要我们添加如下静态文件的中间件,这是框架内置自带的。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseStaticFiles();
}

然后我们就可通过web根目录的相关路径访问静态文件。例如,Web 应用程序项目模板包含 wwwroot 文件夹中的多个文件夹 :

  • wwwroot

    • css
    • images
    • js

然后就可以通过如下格式的URL:https://localhost:5001/images/123.jpg 来访问静态文件。

2.访问web根目录之外的静态文件

有些时候,可能有些静态文件我们并不是放在web根目录下面的。例如如下一个目录层次结构,其中要提供的静态文件位于 Web 根目录之外:

  • wwwroot

    • css
    • images
    • js
  • Content
    • images

      • img.jpg

如果通过URL:https://localhost:5001/Content/images/img.jpg是无法访问的,这个时候我们就需要额外的指定静态文件路径:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//wwroot目录下静态文件
app.UseStaticFiles();
//wwwroot之外的静态文件
app.UseStaticFiles(new StaticFileOptions
{
//指定实际物理路径
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"Content/images")),
//设置URL请求的文件路径
RequestPath = new Microsoft.AspNetCore.Http.PathString("/MyStaticFiles")
});
}

然后就可以通过如下格式的URL:https://localhost:5001/MyStaticFiles/img.jpg 来访问静态文件。

3.提供默认文件

UseDefaultFiles中间件用于启用默认文件的功能,例如我们打开一个网站只输入网站地址,就会自动跳出网站首页。这里的网站首页实际就相当于一个默认文件。

ASP.Net Core为我们简化了默认文件的搜索功能,我们只需要添加中间件即可。

public void Configure(IApplicationBuilder app)
{
app.UseDefaultFiles();
app.UseStaticFiles();
}

要提供默认文件,必须在 UseStaticFiles 前调用 UseDefaultFiles。 UseDefaultFiles 实际上用于重写 URL,不提供文件。 通过 UseStaticFiles 启用静态文件中间件来提供文件。

UseDefaultFiles 默认支持以下几种类型文件:

  • default.htm
  • default.html
  • index.htm
  • index.html

当然,框架也支持自定义默认文件,感兴趣的同学可以研究一下。

例如如下一个目录层次结构:

  • wwwroot

    • Index.html
    • css
    • images
    • js
  • 通过URL:https://localhost:5001/访问时,会自动跳转到并打开Index.html页面

4.启用目录浏览功能

出于安全考虑,目录浏览默认处于禁用状态,需通过添加UseDirectoryBrowser中间件的方式开启。

public void Configure(IApplicationBuilder app)
{
//默认文件
app.UseDefaultFiles();
//静态文件
app.UseStaticFiles();
//目录浏览
app.UseDirectoryBrowser();
}

另外,需要注册目录浏览的服务

public void ConfigureServices(IServiceCollection services)
{
services.AddDirectoryBrowser();
}

例如如下一个目录层次结构:

wwwroot

  • 123.jpg
  • 234.jpg

通过URL:https://localhost:5001/访问时,由于wwwroot根目录下不存在默认文件,所以会打开文件目录。

5.UseFileServer

UseFileServer 结合了 UseStaticFilesUseDefaultFiles 和 UseDirectoryBrowser(可选)的功能。

例如以下目录层次结构:

  • wwwroot

    • 123.jpg
    • 234.jpg
  • Content
    • images

      • 234.jpg

以下代码启用静态文件、默认文件和及 MyStaticFiles 的目录浏览:

public void Configure(IApplicationBuilder app)
{
//静态文件
app.UseStaticFiles(); app.UseFileServer(new FileServerOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "Content")),
RequestPath = "/MyStaticFiles",
//启用目录
EnableDirectoryBrowsing = true
});
}

EnableDirectoryBrowsing 属性值为 true 时必须注册服务 AddDirectoryBrowser

public void ConfigureServices(IServiceCollection services)
{
services.AddDirectoryBrowser();
}

通过URL:https://localhost:5001/MyStaticFiles/访问时,由于目录下不存在默认文件,所以会打开文件目录。

Asp.Net Core入门之静态文件的更多相关文章

  1. ASP.NET Core 1.1 静态文件、路由、自定义中间件、身份验证简介

    概述 之前写过一篇关于<ASP.NET Core 1.0 静态文件.路由.自定义中间件.身份验证简介>的文章,主要介绍了ASP.NET Core中StaticFile.Middleware ...

  2. ASP.NET Core应用针对静态文件请求的处理[5]: DefaultFilesMiddleware中间件如何显示默认页面

    DefaultFilesMiddleware中间件的目的在于将目标目录下的默认文件作为响应内容.我们知道,如果直接请求的就是这个默认文件,那么前面介绍的StaticFileMiddleware中间件会 ...

  3. ASP.NET Core应用针对静态文件请求的处理[4]: DirectoryBrowserMiddleware中间件如何呈现目录结构

    和StaticFileMiddleware中间件一样,DirectoryBrowserMiddleware中间本质上还是定义了一个请求地址与某个物理目录之间的映射关系,而目标目录体现为一个FilePr ...

  4. ASP.NET Core应用针对静态文件请求的处理[3]: StaticFileMiddleware中间件如何处理针对文件请求

    我们通过<以Web的形式发布静态文件>和<条件请求与区间请求>中的实例演示,以及上面针对条件请求和区间请求的介绍,从提供的功能和特性的角度对这个名为StaticFileMidd ...

  5. ASP.NET Core应用针对静态文件请求的处理[2]: 条件请求与区间请求

    通过调用ApplicationBuilder的扩展方法UseStaticFiles注册的StaticFileMiddleware中间件帮助我们处理针对文件的请求.对于StaticFileMiddlew ...

  6. ASP.NET Core应用针对静态文件请求的处理[1]: 以Web的形式发布静态文件

    虽然ASP.NET Core是一款"动态"的Web服务端框架,但是在很多情况下都需要处理针对静态文件的请求,最为常见的就是这对JavaScript脚本文件.CSS样式文件和图片文件 ...

  7. (5)ASP.NET Core 中的静态文件

    1.前言 当我们创建Core项目的时候,Web根目录下会有个wwwroot文件目录,wwwroot文件目录里面默认有HTML.CSS.IMG.JavaScript等文件,而这些文件都是Core提供给客 ...

  8. asp.net core 系列之静态文件

    这篇讲解asp.net core中的静态文件(大致翻译于官网). 静态文件,例如HTML,CSS, images和JavaScript. 要想直接被客户端访问,需要做一些配置. 一.Serve sta ...

  9. Asp.Net Core 中的静态文件

    Asp.Net Core 中的静态文件 在这节中我们将讨论如何使 ASP.NET Core 应用程序,支持静态文件,如 HTML,图像,CSS 和 JavaScript 文件. 静态文件 默认情况下, ...

随机推荐

  1. Life In Changsha College - SQA计划和系统测试规程

    一. SQA计划 (1)     对软件进行测试,保证软件不出问题: (2)     项目需要符合IEEE.ISO等软件工程标准 (3)     软件拥有基本的流程图.类图.数据流图等 (4)    ...

  2. Robot Framework(15)- 扩展关键字

    如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html 前言 什么是扩展 ...

  3. MySQL select from join on where group by having order by limit 执行顺序

    书写顺序:select [查询列表] from [表] [连接类型] join [表2] on [连接条件] where [筛选条件] group by [分组列表] having [分组后的筛选条件 ...

  4. 附019.Rancher搭建及使用

    一 Rancher概述 1.1 什么是Rancher Rancher 是为使用容器的公司打造的容器管理平台.Rancher 简化了使用 Kubernetes 的流程,方便开发者可以随处运行 Kuber ...

  5. 腾讯云EMR大数据实时OLAP分析案例解析

    OLAP(On-Line Analytical Processing),是数据仓库系统的主要应用形式,帮助分析人员多角度分析数据,挖掘数据价值.本文基于QQ音乐海量大数据实时分析场景,通过QQ音乐与腾 ...

  6. Java实现洛谷 P1007独木桥

    题目背景 战争已经进入到紧要时间.你是运输小队长,正在率领运输部队向前线运送物资.运输任务像做题一样的无聊.你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们.士兵 ...

  7. (Java实现) 洛谷 P1025 数的划分

    题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1. 问有多少种不同的分法. 输 ...

  8. Java实现 蓝桥杯 算法训练 天数计算

    试题 算法训练 天数计算 问题描述 编写函数求某年某月某日(**** ** **)是这一年的第几天 .提示:要考虑闰年,闰年的2月是29天(闰年的条件:是4的倍数但不是100的倍数,或者是400的倍数 ...

  9. Java实现 LeetCode 739 每日温度(暴力循环)

    739. 每日温度 根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高,请在该位置用 0 来代替. 例如,给定一个列表 temper ...

  10. Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)

    671. 二叉树中第二小的节点 给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0.如果一个节点有两个子节点的话,那么这个节点的值不大于它的子节点的值. 给出这样的 ...