如何在 ASP.NET Core 中使用 静态文件

ASP.NET Core 支持直接向客户端提供静态文件,比如:Html 文件,图片,js 文件,为了能够让 ASP.NET Core 处理静态文件,需要使用静态文件中间件 并做一些必要配置就可以了,这篇文章我们就来一起讨论下。

安装 静态文件中间件

要想安装 静态文件中间件,必须将 [Microsoft.AspNetCore.StaticFiles]添加到 ASP.NET Core 的请求管道中,可以使用 Visual Studio 2019  中的[NuGet package manager]可视化界面,要么用[NuGet package manager console] 在命令行窗口中键入如下命令。

dotnet add package Microsoft.AspNetCore.Rewrite

基础信息配置

下面的代码展示了在 Startup 中如何对 静态文件中间件 进行配置。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
   app.UseStaticFiles();
   app.UseEndpoints(endpoints =>
   {
       endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
            endpoints.MapRazorPages();
   });
}

ASP.NET Core 中处理 静态文件

静态文件都是统一配置在 wwwroot 文件夹下, 可以看到 wwwroot 文件夹下还有 css,images,js 等文件夹,值得注意的是这些文件夹之间可以采用相对路径进行访问。如何在 ASP.NET Core 中使用 静态文件

如果静态文件中间件已经成功配置好,接下来可以使用下面的路径访问test.png  图片。http://localhost:44399/images/test.png

如何在 ASP.NET Core 中使用 静态文件

如果大家心思细腻的话就会发现,当我不想用wwwroot  来承载这些静态文件的话,该怎么做呢?换句话说,我怎么去处理在wwwroot 文件夹之外的静态文件呢?下面的代码片段展示了如何去配置。

   public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDirectoryBrowser();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseStaticFiles();

            app.UseStaticFiles(new StaticFileOptions()
            {
                FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot")),
                RequestPath = new PathString("/IDGImages")
            });

            app.UseDirectoryBrowser(new DirectoryBrowserOptions()
            {
                FileProvider = new PhysicalFileProvider(
              Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot\images")),
                RequestPath = new PathString("/IDGImages")
            });
        }
    }

然后把程序跑起来并在 url 中指定IDGImages  路径,你将会看到wwwrootimages 文件夹下的所有内容。

如何在 ASP.NET Core 中使用 静态文件

保护文件安全

从前面的例子中可以看到,wwwroot 中的这些文件都是公开可访问的,但很多时候想在某些文件上做一些授权处理,如果要这么做的话,有两种方式可以实现。

1、将需要保护的文件从 wwwroot 移到单独的文件夹中。

2、利用 Action 来处理文件,并返回 FileResult 的方式。

处理默认页面

最后,你可以利用UseDefaultFiles扩展方法来提供一个 web 程序的 默认页面,下面的代码配置展示了如何配置。

public void Configure(IApplicationBuilder app)
{
    app.UseDefaultFiles();
    app.UseStaticFiles();
}

值得注意的是,如果你的 web 程序中需要有静态文件 ,默认文件,目录浏览三项功能的话,可以直接使用UseFileServer扩展方法,下面的代码片段展示了如何在 Configure 方法中进行配置。

app.UseFileServer(enableDirectoryBrowsing: true);

译文链接:https://www.infoworld.com/article/3446957/how-to-work-with-static-files-in-aspnet-core.html

 

© 版权声明

☆ END ☆
喜欢就点个赞吧
点赞0 分享
图片正在生成中,请稍后...