ASP .Net Core 中间件的使用(一):搭建静态文件服务器/访问指定文件

简介: 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

相关文章
|
6月前
|
机器学习/深度学习 存储 监控
内部文件审计:企业文件服务器审计对网络安全提升有哪些帮助?
企业文件服务器审计是保障信息安全、确保合规的关键措施。DataSecurity Plus 是由卓豪ManageEngine推出的审计工具,提供全面的文件访问监控、实时异常告警、用户行为分析及合规报告生成功能,助力企业防范数据泄露风险,满足GDPR、等保等多项合规要求,为企业的稳健发展保驾护航。
184 0
|
6月前
|
安全 Linux Shell
使用SCP命令在CentOS 7上向目标服务器传输文件
以上步骤是在CentOS 7系统上使用SCP命令进行文件传输的基础,操作简洁,易于理解。务必在执行命令前确认好各项参数,尤其是目录路径和文件名,以避免不必要的传输错误。
676 17
|
6月前
|
自然语言处理 Unix Linux
解决服务器中Jupyter笔记本的文件名字符编码问题
通过上述步骤,可以有效解决Jupyter笔记本的文件名字符编码问题,确保所有文件能在服务器上正常访问并交互,避免因编码问题引起的混淆和数据丢失。在处理任何编码问题时,务必谨慎并确保备份,因为文件名变更是
236 17
|
9月前
|
Python
使用Python实现multipart/form-data文件接收的http服务器
至此,使用Python实现一个可以接收 'multipart/form-data' 文件的HTTP服务器的步骤就讲解完毕了。希望通过我的讲解,你可以更好地理解其中的逻辑,另外,你也可以尝试在实际项目中运用这方面的知识。
450 69
|
6月前
|
安全 Linux 网络安全
Python极速搭建局域网文件共享服务器:一行命令实现HTTPS安全传输
本文介绍如何利用Python的http.server模块,通过一行命令快速搭建支持HTTPS的安全文件下载服务器,无需第三方工具,3分钟部署,保障局域网文件共享的隐私与安全。
1469 0
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
269 9
|
存储 UED Windows
Windows服务器上大量文件迁移方案
Windows服务器上大量文件迁移方案
1169 1
|
10月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
存储 安全 网络安全
服务器感染了.baxia勒索病毒,如何确保数据文件完整恢复?
近年来,勒索病毒如.baxia不断演变,利用漏洞、社交工程等手段加密文件,威胁范围扩大。加密货币的兴起使其支付方式更匿名,追踪困难。技术支持尤为重要,添加技术服务号(shuju315),专业团队提供数据恢复方案。面对复杂解密要求,包括赎金支付、个人信息提供和执行特定操作,需保持冷静并寻求帮助。防御措施包括加强安全意识、定期备份数据、安装杀毒软件、避免未知文件、更新系统及制定应急响应计划。
523 11
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
311 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器