ASP .Net Core 中间件的使用(一):搭建静态文件服务器/访问指定文件
前言
随着Asp .Net Core的升级迭代,很多开发者都逐渐倾向于.net core开发。
.net core是一个跨平台的应用程序,可以在windows、Linux、macOS系统上进行开发和部署,是一个体系结构更精简模块化框架。
- 生成WebUi和WebApi的统一使用场景;
- 集成新的客户端框架和开发工作流;
- 前后端分离为两个dll(view.dll,web.dll),更容易迭代,可以使用应用版本控制;
- 内置依赖注入,更高效安全;
- 高性能模块化的HTTP请求管道;
- 能够在iis,nginx,apache,docker上进行托管;
- web开发方式更简化;
释语
ASP.Net Core接收并处理的大部分是针对静态文件的请求,最常见的是JavaScript、CSS样式和图片。
比较有意思的是,他提供了中间件来处理针对于静态文件的请求,这种请求可以通过http请求的方式获取指定的物理文件,并且将其所在的物理目录结构展示出来。
通过http请求获取的web资源大部分来源于存储在服务器磁盘上的静态文件。
为什么使用静态文件服务器?因为这样不需要安装web服务器,打开程序即可使用,方便快捷。
详解
说了这么多,我们来实际操作一下:
使用的是 StaticFiles 中间件。
我们先创建一个Asp .Net Core Web应用程序,操作方式如下:
1、创建一个名为NetCoreFileServer的项目,选择web引用程序,相应的中间件会自动加载进来
选择Web引用程序
发布物理文件
创建项目后,在wwwroot 文件夹下创建一个图片文件夹,添加一行图片,然后将程序运行起来,
网址直接导航到图片:http://localhost:10610/img/Lighthouse.jpg
默认的话只能访问wwwroot文件夹下面的文件,如果需要访问非wwwroot文件下的文件,就需要在中间件中扩展一下;
打开Startup.cs,找到 Configure 方法,在app.UseStaticFiles();后面添加一个扩展方法,如下标红部分:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
} app.UseStaticFiles();
app.UseCookiePolicy(); //这是添加的扩张方法
//设置访问文件
app.UseStaticFiles(new StaticFileOptions
{
//配置除了默认的wwwroot文件中的静态文件以外的文件夹提供 Web 根目录外的文件 ,
//经过此配置以后,就可以访问非wwwroot文件下的文件
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "Image")),
RequestPath = "/Image",
}); app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
然后访问一下非wwwroot文件夹下的文件,http://localhost:10610/Image/Hydrangeas.jpg
这样就能正常访问文件了,其html文件等访问方式一样的操作。
静态文件服务器
按照类似的方式,我们来做一下静态文件的访问;
同理,我们需要在Startup.cs中找到 Configure 方法,在app.UseStaticFiles();后面添加一个扩展方法,如下标红部分:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
} app.UseStaticFiles();
app.UseCookiePolicy(); //这是添加的扩张方法
//设置访问文件
app.UseStaticFiles(new StaticFileOptions
{
//配置除了默认的wwwroot文件中的静态文件以外的文件夹提供 Web 根目录外的文件 ,
//经过此配置以后,就可以访问非wwwroot文件下的文件
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "Image")),
RequestPath = "/Image",
}); //配置访问指定文件磁盘
var dir = new DirectoryBrowserOptions();
dir.FileProvider = new PhysicalFileProvider(@"E:\");
app.UseDirectoryBrowser(dir);
var staticfile = new StaticFileOptions();
staticfile.FileProvider = new PhysicalFileProvider(@"E:\");//指定目录 这里指定E盘,也可以是其它目录
app.UseStaticFiles(staticfile); app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
配置好后启动程序进行访问得到目录,点击指定文件即可访问
这样我们就能浏览指定磁盘的文件了。
你会发现有些文件打开会404,有些又可以打开。那是因为MIME 没有识别出来。
我们可以手动设置这些 MIME ,也可以给这些未识别的设置一个默认值,如下标红部分。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
} app.UseStaticFiles();
app.UseCookiePolicy(); //这是添加的扩张方法
//设置访问文件
app.UseStaticFiles(new StaticFileOptions
{
//配置除了默认的wwwroot文件中的静态文件以外的文件夹提供 Web 根目录外的文件 ,
//经过此配置以后,就可以访问非wwwroot文件下的文件
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "Image")),
RequestPath = "/Image",
}); //配置访问指定文件磁盘
var dir = new DirectoryBrowserOptions();
dir.FileProvider = new PhysicalFileProvider(@"E:\");
app.UseDirectoryBrowser(dir);
var staticfile = new StaticFileOptions();
staticfile.FileProvider = new PhysicalFileProvider(@"E:\");//指定目录 这里指定E盘,也可以是其它目录
staticfile.ServeUnknownFileTypes = true;
staticfile.DefaultContentType = "application/x-msdownload"; //设置默认 MIME
var provider = new FileExtensionContentTypeProvider();
provider.Mappings.Add(".log", "text/plain");//手动设置对应MIME
staticfile.ContentTypeProvider = provider;
app.UseStaticFiles(staticfile); app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
设置好以后,对于未识别的,默认为下载。 .log 就被我手动设置成文本方式。
对于前面的这么多设置,StaticFiles 提供了一种简便的写法。UseFileServer
app.UseFileServer(new FileServerOptions()
{
FileProvider = new PhysicalFileProvider(@"C:\"),
EnableDirectoryBrowsing = true
});
如果需要加上MIME,StaticFileOptions 需要绑定上。
这样就弄好一个静态文件服务器了,同一个局域网内传输文件就可以直接飞速下载。
参考文档1:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/static-files?view=aspnetcore-2.1&tabs=aspnetcore2x#serve-static-files
参考文档2:https://www.cnblogs.com/linezero/p/5541326.html
欢迎关注订阅我的微信公众平台【熊泽有话说】,更多好玩易学知识等你来取
作者:熊泽-学习中的苦与乐 公众号:熊泽有话说 出处:https://www.cnblogs.com/xiongze520/p/14143581.html 创作不易,版权归作者和博客园共有,转载或者部分转载、摘录,请在文章明显位置注明作者和原文链接。 |
ASP .Net Core 中间件的使用(一):搭建静态文件服务器/访问指定文件的更多相关文章
- ASP.NET Core 中间件的使用(二):依赖注入的使用
写在前面 上一篇大家已经粗略接触了解到.NET Core中间件的使用:ASP .Net Core 中间件的使用(一):搭建静态文件服务器/访问指定文件, .NET Core框架中很多核心对象都是通过依 ...
- ASP.NET Core 中间件的使用(三):全局异常处理机制
前言 我们经常听到"秒修复秒上线",觉得很厉害的样子. 其实不然,这只是一个调侃而已,出现问题的方式很多(逻辑漏洞.代码异常.操作方式不正确等). 我们今天来说代码异常问题怎么快速 ...
- 如何一秒钟从头构建一个 ASP.NET Core 中间件
前言 其实地上本没有路,走的人多了,也便成了路. -- 鲁迅 就像上面鲁迅说的那样,其实在我们开发中间件的过程中,微软并没有制定一些策略或者文档来约束你如何编写一个中间件程序, 但是其中却存在者一些最 ...
- ASP.NET Core 中间件Diagnostics使用
ASP.NET Core 中间件(Middleware)Diagnostics使用.对于中间件的介绍可以查看之前的文章ASP.NET Core 开发-中间件(Middleware). Diagnost ...
- ASP.NET Core中间件(Middleware)实现WCF SOAP服务端解析
ASP.NET Core中间件(Middleware)进阶学习实现SOAP 解析. 本篇将介绍实现ASP.NET Core SOAP服务端解析,而不是ASP.NET Core整个WCF host. 因 ...
- [转]ASP.NET Core 中间件详解及项目实战
本文转自:http://www.cnblogs.com/savorboard/p/5586229.html 前言 在上篇文章主要介绍了DotNetCore项目状况,本篇文章是我们在开发自己的项目中实际 ...
- ASP.NET Core中间件实现分布式 Session
1. ASP.NET Core中间件详解 1.1. 中间件原理 1.1.1. 什么是中间件 1.1.2. 中间件执行过程 1.1.3. 中间件的配置 1.2. 依赖注入中间件 1.3. Cookies ...
- ASP.NET Core 入门教程 9、ASP.NET Core 中间件(Middleware)入门
一.前言 1.本教程主要内容 ASP.NET Core 中间件介绍 通过自定义 ASP.NET Core 中间件实现请求验签 2.本教程环境信息 软件/环境 说明 操作系统 Windows 10 SD ...
- ASP.NETCore学习记录(二) —— ASP.NET Core 中间件
ASP.NET Core 中间件 目录: 什么是中间件 ? IApplicationBuilder 使用 IApplicationBuilder 创建中间件 Run.Map 与 Use 方法 实战中间 ...
随机推荐
- [原题复现+审计][CISCN2019 华北赛区 Day1 Web2]ikun(逻辑漏洞、JWT伪造、python序列化)
简介 原题复现: 考察知识点:逻辑漏洞.JWT伪造.python反序列化 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台 ...
- webug第十五关:什么?图片上传不了?
第十五关:什么?图片上传不了? 直接上传php一句话失败,将content type改为图片 成功
- git key生成
1.打开git ssh 2.检查home目录的ssh目录是否存在,没有创建一个,mkdir ~/.ssh 3.运行命名:ssh-keygen -t rsa -C "你的邮箱", 如 ...
- 如何用EasyRecovery恢复受损的SD卡?
SD卡的主要功能是拓展便携式设备.包括:数据相机.手机及其他的多媒体播放器等的存储空间,缓解设备本身的存储压力.即便是在产品内存已经逐渐增加的情况下,还是拥有一大批的忠实用户. 很多用户反应,SD卡使 ...
- 【电子取证:抓包篇】Fiddler 抓包配置与数据分析(简)
Fiddler 抓包配置与分析(简) 简单介绍了Fiddler抓包常用到的基础知识,看完可以大概明白怎么分析抓包数据 ---[suy999] Fiddler 抓包工具,可以将网络传输发送与接受的数 ...
- 15.java设计模式之访问者模式
基本需求: 电脑需要键盘鼠标等固定的组件组成 现在分为个人,组织等去买电脑,而同一种组件对不同的人(访问者)做出不同的折扣,从而电脑的价格也不一样 传统的解决方法:在组件内部进行判断访问人的类型,从而 ...
- Luogu P4306 JSOI2010 连通数
tarjan有向图缩点的基础应用.把原图中某点的连通数转化为反向图中"能够到达某点的个数".缩点后,每个新点的贡献等于 原dcc大小 * f[i] 其中f[i]表示(包括该点自身) ...
- Java基础教程——多线程:创建线程
多线程 进程 每一个应用程序在运行时,都会产生至少一个进程(process). 进程是操作系统进行"资源分配和调度"的独立单位. Windows系统的"任务管理器&quo ...
- SpringBoot 整合邮件oh-my-email 实现发送邮件功能
导读 最近手头上要负责整个Message Gateway服务的搭建,涉及到:微信推送(点我直达).短信.邮件等等,到github上发现有个微型的开源邮件框架,整理下来,以备项目中使用到,到时候应该会使 ...
- FlashCache初体验
注意: 测试用的是CentOS6.5 内核版本2.6.32-431.el6.x86_64 步骤: 上传CentOS6.5做本地yum源,安装以下包. yum install gcc yum insta ...