文件系统
静态文件
什么是静态文件?
就是静态资源,js css image 这些
一般放在项目哪个位置?
wwwroot文件夹下 所以wwwroot 文件夹理解为 静态资源根目录
整个项目根目录与静态文件根目录区别?
整个应用程序启动的时候,WebHost.CreateDefaultBuilder() 中默认下把项目的当前目录设置为内容根目录,也就是项目右键 文件管理器目录
静态资源根目录就是 wwwroot,所以访问静态资源只需要留意wwwroot开始的路径即可
这个图片就是 localhost:5000/css/333.png 直接就从wwwroot开始
使用静态文件三部曲:
1:wwwroot 需要有这个文件 如果项目是mvc框架就会带出来,不是mvc项目没有就自己建 一个新建文件夹然后 重命名为wwwroot 就会出来 然后在自己建css这些内容完善
2:注册中间件
app.UseStaticFiles(); //对应wwwroot的使用
3:自定义中间件 我不想用wwwroot 我就想个性化自己创建一个文件夹当静态文件夹或者某些需求就是存在别的文件夹下的图片我要使用 比如在项目中建teststatic文件夹,然后我自定义访问路径
app.UseStaticFiles(new StaticFileOptions() // 自定义配置 自己配置静态 文件夹 自己定义一个请求路径
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "teststatic")), // 物理文件路径
RequestPath = new PathString("/StaticFiles"), // 请求路径 必须有,不然只有文件夹没有自定义路径访问不了
});
这样就是 localhost:5000/StaticFiles/333.png 访问了
至于到底怎么使用,可以用wwwroot 也可以自定义 也可以俩种都写在项目中,都可以访问得到图片
文件目录
能够访问文件了之后,有的时候就需要看一个文件目录下所有的文件
注册服务
app.UseStaticFiles(); //对应wwwroot的使用
注册中间件
app.UseDirectoryBrowser(); //对应wwwroot规则
app.UseDirectoryBrowser(new DirectoryBrowserOptions()
{ //对应自定义文件访问的目录规则
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "teststatic")),
RequestPath = new PathString("/StaticFiles"),
});
效果:
项目启动默认文件
默认的话 是从default.htm/index.htm 来找找到第一个满足的就显示
注册顺序一定要在静态文件之前
app.UseDefaultFiles(); //使用默认文件中间件
app.UseStaticFiles(); //使用静态文件中间件(必须)
当然可以自定义默认启动文件Index2
DefaultFilesOptions options = new DefaultFilesOptions();
options.DefaultFileNames.Clear(); // 清除默认文件
options.DefaultFileNames.Add("Index2.html"); //添加指定文件为默认文件
app.UseDefaultFiles(options); //使用默认文件中间件
app.UseStaticFiles(); //使用静态文件中间件(必须)
配置文件
什么是配置文件?
为了实现高内聚低耦合,这么一种数据使用的方式,将一些内容放在配置文件,便于维护。
一般是怎么读取配置文件使用的?
读取的方式可以看上一篇
Asp.Net Core 读取配置文件的多种方式
文件检测
抽象文件接口 IFileProvider 要依靠这个接口的 watch 去监控文件内容
1.要先注册一下监控的地方是哪里
2.监控变更后的操作
//先配置选项 将配置内容弄好 这一步只是为了 在控制器 用配置去读取值 看变化
var configContent = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", false, true).Build()
.GetSection("JwtSetting");
services.AddOptions()
.Configure<configclass>(configContent);
//比如监控 appsettings.json 文件 先找到文件夹层级 然后 startup注册文件夹
services.AddSingleton<IFileProvider>(new PhysicalFileProvider(@"D:\新建文件夹\Marzlam\Marzlam1"));
然后在控制器使用处
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly IOptions<configclass> _options;
private readonly IFileProvider _fileProvider;
public HomeController(ILogger<HomeController> logger, IFileProvider fileProvider,IOptions<configclass> options)
{
_logger = logger;
_options = options;
_fileProvider = fileProvider;
}
public IActionResult Index()
{
ChangeToken.OnChange(() => _fileProvider.Watch("appsettings.json"), () =>
{
//会发现改了appsettings.json内容时 断点会进入 值也会刷新
var res = _options.Value.Key;
});
return View();
}
}