Using a wwwroot folder (ASP.NET Core style) in ASP.NET 4.5 project

I believe I have a working method for doing this now. Took a bit of googling and experimentation, but in the end I came up with the following process:

  1. Create a new ASP.NET 4.5 project in VS2015, selecting the Empty Template

  2. Add OWIN references through nuget (Install-Package Microsoft.Owin.Host.SystemWeb and Microsoft.Owin.StaticFiles)

  3. Add a startup file similar to this:

    [assembly: OwinStartup(typeof(MyApp.Startup))]
    namespace MyApp.UI
    {
        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                string root = AppDomain.CurrentDomain.BaseDirectory;
                var physicalFileSystem = new PhysicalFileSystem(Path.Combine(root, "wwwroot"));
                var options = new FileServerOptions
                {
                    RequestPath = PathString.Empty,
                    EnableDefaultFiles = true,
                    FileSystem = physicalFileSystem
                };
                options.StaticFileOptions.FileSystem = physicalFileSystem;
                options.StaticFileOptions.ServeUnknownFileTypes = false;
                app.UseFileServer(options);
            }
        }
    }
    
  4. Add the following to your web.config file, to prevent IIS from serving static files you don’t want it to, and force everything through the OWIN pipeline:

    <system.webServer>
        <handlers>
          <remove name="StaticFile"/>
          <add name="Owin" verb="" path="*" type="Microsoft.Owin.Host.SystemWeb.OwinHttpHandler, Microsoft.Owin.Host.SystemWeb"/>
        </handlers>
      </system.webServer>
    

I’m always open to better suggestions on how to do this, but this at least seems to work for me.

Leave a Comment