ASP.NET Core使用静态文件、目录游览与MIME类型管理
今天我们来了解了解ASP.NET Core中的静态文件的处理方式.
以前我们寄宿在IIS中的时候,很多静态文件的过滤 和相关的安全措施 都已经帮我们处理好了.
ASP.NET Core则不同,因为是跨平台的,解耦了IIS,所以这些工作 我们可以在管道代码中处理.
在我们的Web程序开发中,肯定要提供很多的静态文件(比如:JS,CSS)给客户端下载使用.所以我们先来看看ASP.NET Core中是怎么处理的.
当我们创建一个ASP.NET Core MVC的模版程序后,会发现它与传统的文件结构还是会有区别.
多了一个wwwroot文件夹,少了很多其他的资源文件夹.如图:
我们点进去,就可以看到,微软的模版,已经把所有的资源文件全放到了这里面,如图:
这样,项目就干净了许多,下面,我们就来讲讲这个资源根目录
1.提供静态文件
我们到模版的Startup管道配置中,可以看到,注入相关静态资源的代码,已经帮我们写好了,如图:
这句话就是注入静态资源用的,默认会将wwwroot的资源直接配置的和根目录一样,来方便访问.
访问资源的URL类似: "http://localhost:9189/images/banner3.svg" 这样.
那么问题来了,我们能不能自己配置这个静态资源呢?.
当然是可以的~.
我们在项目中创建文件夹如下:
然后通过StaticFileOptions注入静态资源的配置,代码如下:
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), @"StaticFiles")),
RequestPath = new PathString("/StaticFiles")
});
注意:这里的2个StaticFiles, 第一个是你的本地资源路径,第二个是你需要配置的URL路径,URL路径可以自己定义,这样可以一定程度上保护自己的资源安全.
然后我们通过URL访问效果如下:
在StaticFileOptions
中,我们还可以通过OnPrepareResponse属性配置我们的响应头,添加 代码如下:
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), @"StaticFiles")),
RequestPath = new PathString("/StaticFiles"),
OnPrepareResponse = ctx =>
{
ctx.Context.Response.Headers.Append("Cache-Control", "public,max-age=600");
}
});
这里,我们设置http响应缓存为600秒.
(小知识:max-age:表示当访问此网页后的max-age秒内再次访问不会去服务器请求,其功能与Expires类似,只是Expires是根据某个特定日期值做比较。一但缓存者自身的时间不准确.则结果可能就是错误的,而max-age,显然无此问题.。Max-age的优先级也是高于Expires的。)
效果如下:
这样,我们就可以根据需求来配置自己的静态文件缓存和其他的响应头信息.
2.启用静态文件目录浏览
开启静态文件目录浏览..其实是一件安全性级低的事情,不管是传统的asp.net还是asp.net core 默认都是关闭了这个功能.
但是,不排除我们会用到.在asp.net中,我们只需要的Web.config中配置即可.
下面我们就来讲讲如何在asp.net core 中启用我们的静态文件目录游览
开启静态文件目录游览需要使用UseDirectoryBrowser来注入配置,代码如下:
app.UseDirectoryBrowser(new DirectoryBrowserOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), @"StaticFiles")),
RequestPath = new PathString("/MyStaticFiles")
});
这里,我特意改了URL的访问路径.为MyStaticFiles..我们来看看效果:
我们点击里面任意一个文件,会发现.返回404.因为路径是
所以,这里需要和上面的文件URL路径一致,才可以访问的到文件.(这样其实提供了一种比较安全的配置手段.可以隐藏自己本机的真实路径)
3.使用UseFileServer合成的注入方法~简化代码.
按照我们上面的配置,如果开启了文件和目录游览,就会发现写了不少注入代码,如下:
这样不是很方便,也不利于后期的维护.那么,下面我们就来简化他~
UseFileServer的
功能结合了UseStaticFiles
,UseDefaultFiles
和UseDirectoryBrowser
。
我们把上面的代码全部注释.并修改代码如下:
app.UseFileServer(new FileServerOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), @"StaticFiles")),
RequestPath = new PathString("/StaticFiles"),
EnableDirectoryBrowsing = true
});
效果如下:
这里,注意EnableDirectoryBrowsing属性,就是是否启用目录的属性.
4.ASP.NET Core中使用MIME内容类型来过滤静态文件返回.
上篇文章我们提到过.需要使用
FileExtensionContentTypeProvider
这个类.具体使用方法,直接new一个即可,里面包含了300多种已知的文件类型,如下:
为什么这里我们要提到这个呢.因为他可以帮我们过滤一些不想让客户端访问的文件类型.如下:
这里要注意,使用FileExtensionContentTypeProvider,只能通过UseStaticFiles,不能使用UseFileServer
因为ContentTypeProvider是StaticFileOptions(静态文件选项)的配置内容,在FileServerOptions中并没有.
上面的代码,我们删除了png格式文件.也就是不返回这个内容的文件.运行后效果如下:
我们访问我们的gif格式的文件,效果如下:
还是可以正常访问的.对于一些安全性较高,或者涉及文件类型较多的功能来说.还是比较实用的.可以自己过滤掉一些敏感类型.比如exe.
好了,本篇到此就结束了~欢迎大家批评指正~喜欢或者觉得有用的话 就关注一下 点个推荐..谢谢~
ASP.NET Core使用静态文件、目录游览与MIME类型管理的更多相关文章
- 基于 Vue.js 之 iView UI 框架非工程化实践记要 使用 Newtonsoft.Json 操作 JSON 字符串 基于.net core实现项目自动编译、并生成nuget包 webpack + vue 在dev和production模式下的小小区别 这样入门asp.net core 之 静态文件 这样入门asp.net core,如何
基于 Vue.js 之 iView UI 框架非工程化实践记要 像我们平日里做惯了 Java 或者 .NET 这种后端程序员,对于前端的认识还常常停留在 jQuery 时代,包括其插件在需要时就引 ...
- 这样入门asp.net core 之 静态文件
本文章主要说明asp.net core中静态资源处理方案: 一.静态文件服务 首先明确contentRoot和webroot这两个概念 contentRoot:web的项目文件夹,其中包含webroo ...
- asp.net core 控制静态文件的授权
静态文件访问在网站中是一项重要的服务,用于向前端提供可以直接访问的文件,如js,css,文档等,方法是在Startup的Configure中添加UseStaticFiles()管道. 参考:ASP.N ...
- 利用ASP .NET Core的静态文件原理实现远程访问Nlog日志内容及解决遇到的坑
最近项目上试运行发现,很多时候网站出了问题或者某个功能不正常,常常需要运维人员去服务器里面查看一下日志,看看日志里面会产生什么异常,这样导致每次都要去远程服务器很不方便,有时服务器是客户保管的不能让我 ...
- asp.net core 之静态文件目录的操作
文章前言 之前写了一篇关于模拟登录的文章,自我感觉内容不太丰富,今天的这篇文章,希望在内容上能丰富些.本人缺少写文章的经验,技术上也是新手,但我会努力的,希望大家多多支持小弟. asp.net cor ...
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
C#编译器优化那点事 使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码 ...
- asp.net core配置下载文件
asp.net core的wwwroot文件夹下默认时保存静态文件的地方,外面可以直接访问,但是如果是一些无法识别的后缀文件,如(.apk),会报错404 如果想要实现下载这些文件,在配置静态文件中间 ...
- ASP.NET Core 中的文件上传
ASP.NET Core上传文件 ASP.NET Core使用IFormFile来读取上传的文件内容,然后将数据写入到磁盘或其它存储空间. 添加FileUpload模型,用来接收上传的文件内容. pu ...
- ASP.NET Core appsettings.json 文件
ASP.NET Core appsettings.json 文件 在本节中,我们将讨论 ASP.NET Core 项目中appsettings.json文件的重要性. 在以前的 ASP.NET 版本中 ...
随机推荐
- Win10 之最新最简单有效安装配置adb
今天在新买的笔记本上安装配置adb,开始觉得挺简单的事,公司win7电脑上有现成的,但实际过程中--没想的那么简单了!好了,废话少说,直接正题. 研究了好一会下,总算搞定,总结如下: 1.下载Andr ...
- yii2.0中数据缓存之增删改查
public function actionSss(){ /* * 获取到缓存 * 这里是获取的是根目录下 的common/main.php中的缓存类组件 * */ $cache=\Yii::$app ...
- 通过邮箱发送html报表
前言 需求是发送邮件时, 可以将报表正文贴到邮件里, 可以正常复制选中报表内容. 目前的做法是简单粗暴的转成了一张图片, 这样效果显然是很糟糕的. 今天看到邮箱里可以预览Word, Excel, F1 ...
- linux工作中遇到的问题总结---更新中
今天这个,严格来说不算一篇文章,我只想把我工作中遇到的问题分享给大家,让大家少犯错误. 1.安装rmp包时出现错误 :header V3 DSA signature: nokey ,key id .. ...
- json篇
QQ:1187362408 欢迎技术交流和学习 json篇(json): TODO: 1,json:json是什么( JSON(JavaScript Object Notation) 是一种轻量级的数 ...
- LeetCode139:Word Break
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separa ...
- POJ 1861:Network(最小生成树&&kruskal)
Network Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 13266 Accepted: 5123 Specia ...
- c语言中字符串函数的使用
#include<stdio.h> #include<string.h> /* char s1[]="I am a student"; char s2[20 ...
- poj 1087 A Plug for UNIX 【最大流】
题目连接:http://poj.org/problem? id=1087 题意: n种插座 ,m个电器,f组(x,y)表示插座x能够替换插座y,问你最多能给几个电器充电. 解法:起点向插座建边,容量1 ...
- 入门vue----(vue的安装)
1.安装node.js 2.基于node.js,利用淘宝npm镜像安装相关依赖 在cmd里直接输入:npm install -g cnpm –registry=https://registry.npm ...