视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
c# .Net Core静态文件服务器的新人入门教程
2020-11-27 22:34:52 责编:小采
文档


设置任意目录下的静态文件可以访问代码:

 // 设置 指定目录的文件 可以被访问 start
 var staticfile = new StaticFileOptions();
 staticfile.FileProvider = new PhysicalFileProvider(@"C:\"); // 指定目录,这里指的是C盘,也可以指定其他目录
 app.UseStaticFiles(staticfile); 

我们吧startup.cs的***Configure*** 函数代码改为如下代码(增加了c盘文件可以访问):

 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 {
 var staticfile = new StaticFileOptions();
 staticfile.FileProvider = new PhysicalFileProvider(@"C:\"); // 指定目录,这里指的是C盘,也可以指定其他目录
 app.UseStaticFiles(staticfile); // 使用默认文件夹 wwwroot 仅仅shi wwwroot对外可见
 
 app.Run(async (context) => 
 {
 await context.Response.WriteAsync("hello jesus");
 });
 }

c盘文件展示

运行效果

这样我们就可以访问任意目录下的文件了,那么问题来了,c盘中有个 叫 456.log 的文件,我们访问不了,原因是:服务器不能识别,怎么办?如何让服务器识别 所有类型的文件呢?  我们以 .log 为后缀的文件为例

我们将***Configure*** 改为一下内容:

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 {
 var staticfile = new StaticFileOptions();
 staticfile.FileProvider = new PhysicalFileProvider(@"C:\"); // 指定目录,这里指的是C盘,也可以指定其他目录

 // 设置 对应的文件类型(防止Mime type没事别出来,打不开或出现404错误)
 staticfile.ServeUnknownFileTypes = true;
 staticfile.DefaultContentType = "application/x-msdownload";// 设置默认 MIME TYPE
 var provider = new FileExtensionContentTypeProvider();
 provider.Mappings.Add(".log", "text/plain"); // 手动设置对应的 MIME TYPE
 staticfile.ContentTypeProvider = provider;

 app.UseStaticFiles(staticfile); // 使用默认文件夹 wwwroot 仅仅shi wwwroot对外可见
 // 设置 指定目录的文件 可以被访问 end

 app.Run(async (context) =>
 {
 await context.Response.WriteAsync("hello jesus");
 });
 }

我们将不能识别的文件类型默认为 : "application/x-msdownload",即遇到我们没处理的,不能识别的类型统统下载下来。

provider.Mappings.Add(".log", "text/plain"); // 手动设置对应的 MIME TYPE 。我们手动增加了 对后缀为.log的文件类型的处理,当成文本文件处理,即txt处理。

运行效果

未知的文件 (我们访问7.ggg文件,此文件类型我们未处理过)

已处理的文件类型

这样,我们就可以访问任意类型的静态文件了,那么问题又来了, 我想访问一个目录下所有的文件,即访问某个目录怎么办?

在 NET Core 中访问目录的功能默认是禁止的,需要手动开启。

步骤:

1、在 ConfigureServices 函数中增加 目录访问服务,

 public void ConfigureServices(IServiceCollection services)
 {
 services.AddDirectoryBrowser(); // 使目录可以被浏览 (浏览所有的文件以及文件夹)
 }

2、在Configure 函数中增加 中间键 和 具体的目录,在这里我们让 c盘下的所有目录可以被访问

 // 设置 目录可浏览 start
 var dir = new DirectoryBrowserOptions();
 dir.FileProvider = new PhysicalFileProvider(@"C:\");
 app.UseDirectoryBrowser(dir);
 // 设置 目录可浏览 end

这样我们就可以访问c盘中的任意目录了,效果如下:

Startup.cs 文件最终代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.StaticFiles;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;

namespace StaticFileServer
{
 public class Startup
 {
 // This method gets called by the runtime. Use this method to add services to the container.
 // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=3940
 public void ConfigureServices(IServiceCollection services)
 {
 services.AddDirectoryBrowser(); // 使目录可以被浏览 (浏览所有的文件以及文件夹)
 }

 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 {
 // 设置 目录可浏览 start
 var dir = new DirectoryBrowserOptions();
 dir.FileProvider = new PhysicalFileProvider(@"C:\");
 app.UseDirectoryBrowser(dir);
 // 设置 目录可浏览 end

 // 设置 指定目录的文件 可以被访问 start
 var staticfile = new StaticFileOptions();
 staticfile.FileProvider = new PhysicalFileProvider(@"C:\"); // 指定目录,这里指的是C盘,也可以指定其他目录

 // 设置 对应的文件类型(防止Mime type没事别出来,打不开或出现404错误)
 staticfile.ServeUnknownFileTypes = true;
 staticfile.DefaultContentType = "application/x-msdownload";// 设置默认 MIME TYPE
 var provider = new FileExtensionContentTypeProvider();
 provider.Mappings.Add(".log", "text/plain"); // 手动设置对应的 MIME TYPE
 staticfile.ContentTypeProvider = provider;

 app.UseStaticFiles(staticfile); // 使用默认文件夹 wwwroot 仅仅shi wwwroot对外可见
 // 设置 指定目录的文件 可以被访问 end

 app.Run(async (context) => 
 {
 await context.Response.WriteAsync("hello jesus");
 });
 }
 }
}

总结

下载本文
显示全文
专题