John Rood
John Rood

Reputation: 835

How can you use multiple directories for static files in an aspnet core app?

By default, the wwwroot directory can host static files. However, in some scenarios, it might be ideal to have two directories for static files. (For example, having webpack dump a build into one gitignored directory, and keeping some image files, favicon and such in a not-gitignored directory). Technically, this could be achieved by having two folders within the wwwroot, but it might organizationally preferable to have these folders at the root level. Is there a way to configure an aspnet core app to use two separate directories for static files?

Upvotes: 29

Views: 14736

Answers (2)

MoishyS
MoishyS

Reputation: 2882

Registering UseStaticFiles twice won't solve it for MapFallbackToFile

An alternative approach.

// Build the different providers you need
var webRootProvider = 
  new PhysicalFileProvider(builder.Environment.WebRootPath);

var newPathProvider = 
  new PhysicalFileProvider(
   Path.Combine(builder.Environment.ContentRootPath, @"Other"));

// Create the Composite Provider
var compositeProvider = 
  new CompositeFileProvider(webRootProvider, newPathProvider);

// Replace the default provider with the new one
app.Environment.WebRootFileProvider = compositeProvider;

https://wildermuth.com/2022/04/25/multiple-directories-for-static-files-in-aspnetcore/

Upvotes: 5

juunas
juunas

Reputation: 58898

Just register UseStaticFiles twice:

app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(
        Path.Combine(Directory.GetCurrentDirectory(), "static"))
});

Now files will be found from wwwroot and static folders.

Upvotes: 71

Related Questions