静态文件

已按固定格式整理完成,以下为 WordPress 可复制排版内容:

14-静态文件中间件理解

HTML CSS JS 图片 这些资源之间返回给客户端

静态文件通常再wwwroot

可以设置内容目录

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())//设置内容目录
        .UseStartup<Startup>()
        .Build();Code language: PHP (php)

访问静态文件

http://<app>/images/图片文件

比如 http://localhost:57629/images/063253ndtt5i8siierdtrt.jpg

记得配置

public void ConfigureDevelopment(IApplicationBuilder app)
{
    app.UseStaticFiles();Code language: JavaScript (javascript)

可以设置网页根目录 在program类里

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseContentRoot(Directory.GetCurrentDirectory())//设置内容目录
        .UseWebRoot("content")//重新设置网页根目录 
        .UseStartup<Startup>()
        .Build();Code language: PHP (php)

我们就可以直接访问content里面的文件了。原来wwwroot下面的css 等就无法访问了。

经过上面的配置 现在我们访问 /myimages 就可以列出所有文件包括子文件和目录。

15-目录浏览-UseDirectoryBrowser中间件

处于安全考虑 默认情况是禁止目录访问的,不过通过Configure可以开启。

public void ConfigureDevelopment(IApplicationBuilder app)
{
    //目录浏览
    app.UseDirectoryBrowser(
        new DirectoryBrowserOptions()
        {
            FileProvider = new PhysicalFileProvider(
                Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot\images")),
            RequestPath = new PathString("/MyImages")
        }
    );Code language: JavaScript (javascript)

调用AddDirectoryBrowser扩展方法,在StartUP.ConfigureServices中调用:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDirectoryBrowser();
}Code language: JavaScript (javascript)
//开启目录浏览
//xxx.com/images/ 列出该目录下面所有的文件
//app.UseDirectoryBrowser();
//访问xxx.com/ 就会列出 网页根目录 wwwroot下面的所有文件 
//当然 正常的mvc路由还是可以用

//配置目录浏览参数 
app.UseDirectoryBrowser(
    new DirectoryBrowserOptions()
    {
        FileProvider = new PhysicalFileProvider(
            Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot\images")),
        RequestPath = new PathString("/MyImages")
    }
);Code language: JavaScript (javascript)

16-设置默认起始页UseDefaultFiles

设置默认首页给站点的每个访问者提供一个起始页。使用UseDefaultFiles扩展方法:

public void Configure(IApplicationBuilder app)
{
    //使用默认起始页
    app.UseDefaultFiles();

    //使用静态文件
    app.UseStaticFiles();Code language: JavaScript (javascript)

app.UseDefaultFiles 必须在 app.UseStaticFiles 之前调用。app.UseDefaultFiles 只是重定向URL而不是真的提供一个文件。因此必须开启静态文件中间件(UseStaticFiles)来提供这个文件。然后通过 app.UseDefaultFiles 就会请求文件夹的时候检索以下文件:

  • default.htm
  • default.html
  • index.htm
  • index.html

按以上顺序 找到第一个 就返回。这些文件 要放到网站根目录 就是wwwroot 否则会找不到 找不到就会交给mvc来处理。

设置我们自己定义的默认文件 bamndefault.htm:

//使用默认起始页
DefaultFilesOptions options = new DefaultFilesOptions();
options.DefaultFileNames.Clear();
options.DefaultFileNames.Add("bamndefault.htm");
app.UseDefaultFiles();Code language: JavaScript (javascript)

添加一个 bamndefault.htm:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
     this is www.FoxDevelop.com
</body>
</html>Code language: HTML, XML (xml)

配置自定义的默认文件:

//设置我们定义的文件
DefaultFilesOptions options = new DefaultFilesOptions();
options.DefaultFileNames.Clear();
options.DefaultFileNames.Add("bamndefault.htm");
app.UseDefaultFiles(options);Code language: JavaScript (javascript)

这个文件 放在wwwroot下面。

非标准的内容类型

ASP.NET CORE能支持400多种已知文件类型 但是如果用户请求了一个未知的文件类型 静态文件中间件一般返回HTTP 404响应。下面 我们把一个未识别的文件类型 做图片处理。

一个实例-简单文件服务器

创建一个asp.net core空项目,可以设置默认文件目录 wwwroot为其他。我们这个程序 可以访问C盘下面的文件。然后发现有些文件打开不了 404 这个时候我们需要手动设置MIME Type。

关于ASP.NET CORE的配置文件

ASP.NET CORE支持多种不同的配置选项,可以使用json xml ini等。asp.net core中配置文件 不像以前的asp.net。

可以把配置放到缓存里面 也就是它是一个虚拟 没有实体的配置:builder.AddInMemoryCollection();

放在内存的配置:

//添加一个配置 存放在内存中 下次就没有了
var builder = new ConfigurationBuilder();
builder.AddInMemoryCollection();

//得到一个配置 并且以key value的方式存储
var config = builder.Build();
config["key"] = "value";

//读取配置
var value = config["key"];Code language: JavaScript (javascript)

读取本地文件的配置,通过SetBasePath 去设置具体的json所在的目录,然后通过AddJsonFile 加载一个具体的json:

//new一个配置构造器
var builder = new ConfigurationBuilder();

//下面是使用内置的配置 比如appsettings.json
builder.SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json");
var root = builder.Build();
var conn = root.GetValue<string>("conn");Code language: JavaScript (javascript)

appsettings.json:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "Conn": "www.FoxDevelop.comddddddddddddddddd"
}Code language: JSON / JSON with Comments (json)

在控制器中读取配置:

public IActionResult Index()
{
    //new一个配置构造器
    var builder = new ConfigurationBuilder();

    //下面是使用内置的配置 比如appsettings.json
    builder.SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json");
    var root = builder.Build();
    var conn = root.GetValue<string>("conn");

    return View();
}Code language: PHP (php)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注