• 静态文件的默认目录是 wwwroot ,此目录必须位于项目文件夹的根目录中。
  • 将图片复制并粘贴到 wwwroot 文件夹中。我们假设文件的名称是 # ASP.NET  Core 中的静态文件。

  • 默认情况下,ASP.NET Core 应用程序不会提供静态文件。
  • 静态文件的默认目录是 wwwroot ,此目录必须位于项目文件夹的根目录中。
  • 将图片复制并粘贴到 wwwroot 文件夹中。我们假设文件的名称是 “钢铁侠.png”。为了能够从浏览器访问此文件,路径为: http://{{serverName}}/钢铁侠.png 在我们的示例中,我们在本地计算机上运行,​​ 因此 URL 将如下所示。您的计算机上的端口号可能不同。 http://localhost:32702/钢铁侠.png

    从我的电脑,然后导航到上面的 Url 的时候, 我们仍然是通过 Run() 方法的中间件,返回响应的结果,。我没有看到图片 钢铁侠.png 。 这是因为,目前我们的应用程序请求处理管道,没有可以提供静态文件的所需中间件。我们需要使用的中间件 UseStaticFiles()

    修改 Configure() 方法中的代码,将 UseStaticFiles() 中间件添加到我们的应用程序的请求处理管道中,如下所示。。为了能够从浏览器访问此文件,路径为: http://{{serverName}}/钢铁侠.png 在我们的示例中,我们在本地计算机上运行,​​ 因此 URL 将如下所示。您的计算机上的端口号可能不同。 http://localhost:32702/钢铁侠.png

    从我的电脑,然后导航到上面的 Url 的时候, 我们仍然是通过 Run() 方法的中间件,返回响应的结果,。我没有看到图片 钢铁侠.png 。 这是因为,目前我们的应用程序请求处理管道,没有可以提供静态文件的所需中间件。我们需要使用的中间件 UseStaticFiles()

    修改 Configure() 方法中的代码,将 UseStaticFiles() 中间件添加到我们的应用程序的请求处理管道中,如下所示。

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        if (env.IsDevelopment())
            app.UseDeveloperExceptionPage();
       //添加静态文件中间件
        app.UseStaticFiles();
        app.Run(async (context) =>
            await context.Response.WriteAsync("Hello World!");
    

    wwwroot文件夹中没有像 vs 提供的默认模板一样把图片、CSS 和 JavaScript 文件进行分类,我们建议将不同的文件类型进行文件夹区分,参考下图文件夹层次结构 :

    为了能够从浏览器访问钢铁侠.png我们输入地址为 http://localhost:32702/images/i钢铁侠.png 得到结果。

    提供默认文档

    大多数 Web 程序都有一个默认文档,它是用户访问程序地址时显示的文档内容。例如,您有一个名为default.html的文件,并且您希望在用户访问应用程序的根 URL 时提供它,即http://localhost:32702.

    此时,我们来访问这个地址看看,我看到我使用Run()方法注册的中间件产生的回调。但是我没有看到默认文档default.html的内容。为了能够提供默认页面,我们必须在应用程序的请求处理管道中插入UseDefaultFiles()中间件

    //添加默认文件中间件
    app.UseDefaultFiles();
    //添加静态文件中间件
    app.UseStaticFiles();
    

    请注意:必须在UseStaticFiles之前,注册UseDefaultFiles来提供默认文件。UseDefaultFiles是一个 URL 重写器,实际上并没有提供文件。它只是将URL重写定位到默认文档,然后还是由静态文件中间件提供。地址栏中显示的 URL 仍然是根节点的 URL,而不是重写的 URL。

    以下是UseDefaultFiles中间件默认会去查找的地址信息

    - index.htm 的默认文件
    - index.html
    - default.htm
    - default.html
    

    如果要使用其他文档,如 JoeZ.html 例如,作为您的默认文档,您可以使用以下代码执行此操作。

    //将JoeZ.html指定为默认文档
    DefaultFilesOptions defaultFilesOptions = new DefaultFilesOptions();
    defaultFilesOptions.DefaultFileNames.Clear();
    defaultFilesOptions.DefaultFileNames.Add("JoeZ.html");
    //添加默认文件中间件
    app.UseDefaultFiles(defaultFilesOptions);
    //添加静态文件中间件
    app.UseStaticFiles();
    

    UseFileServer 中间件

    UseFileServer结合了UseStaticFiles,UseDefaultFiles和UseDirectoryBrowser中间件的功能。DirectoryBrowser中间件,支持目录浏览,并允许用户查看指定目录中的文件。 我们可以用UseFileServer 中间件替换UseStaticFiles 和 UseDefaultFiles中间件。

    //使用UseFileServer而不是UseDefaultFiles和UseStaticFiles
    FileServerOptions fileServerOptions = new FileServerOptions();
    fileServerOptions.DefaultFilesOptions.DefaultFileNames.Clear();
    fileServerOptions.DefaultFilesOptions.DefaultFileNames.Add("JoeZ.html");
    app.UseFileServer(fileServerOptions);
    

    这里要注意的知识点:是我们应该使用添加中间件的方式,添加到应用程序的请求处理管道的方法。 在大多数情况下,我们使用以 USE 开头的扩展方法添加中间件。例如:

    UseDeveloperExceptionPage()
    UseDefaultFiles()
    UseStaticFiles()
    UseFileServer()
    

    如果要自定义这些中间件组件,他有对应的可配置选项卡。参考下表:

    中间件选项对象
    UseDeveloperExceptionPageDeveloperExceptionPageOptions
    UseDefaultFilesDefaultFilesOptions
    UseStaticFilesStaticFileOptions
    UseFileServerFileServerOptions
    分类:
    后端
    标签: