How to set default static web page for Katana/Owin self hosted app? How to set default static web page for Katana/Owin self hosted app? asp.net asp.net

How to set default static web page for Katana/Owin self hosted app?


a more detailed version of fra's answer:

1- NuGet to install Microsoft.Owin.StaticFiles (I assumed you already installed Microsoft.AspNet.WebApi.OwinSelfHost via NuGet)

2- Create a single directory in your solution (in Visual Studio), and put all your client files in it, e.g.

+Web--+images--+pages------page1------page2--+scripts--+css---index.html

Note: there is a root directory (web) that contains all other directories, and the index.html under the root directly.

3- Now, in the same class that contains your web api routing configuration, add the following code:

var physicalFileSystem = new PhysicalFileSystem(@".\Web"); //. = root, Web = your physical directory that contains all other static content, see prev stepvar options = new FileServerOptions{    EnableDefaultFiles = true,    FileSystem = physicalFileSystem }; options.StaticFileOptions.FileSystem = physicalFileSystem; options.StaticFileOptions.ServeUnknownFileTypes = true; options.DefaultFilesOptions.DefaultFileNames = new[] { "index.html" }; //put whatever default pages you like here appBuilder.UseFileServer(options);

4- One more step for the prev code to work: make sure to set the Copy to output directory property of all files in Web directory (and all nested directories) is set to Copy Always [select the file | press F4, or right-click then properties | go to Copy to output directory]

That's all :)


I do it this way:

var physicalFileSystem = new PhysicalFileSystem(webPath);var options = new FileServerOptions                          {                              EnableDefaultFiles = true,                              FileSystem = physicalFileSystem                          };        options.StaticFileOptions.FileSystem = physicalFileSystem;        options.StaticFileOptions.ServeUnknownFileTypes = true;        options.DefaultFilesOptions.DefaultFileNames = new[] { "index.html" };        appBuilder.UseFileServer(options);


Maybe it's a late answer, but if you need just a default document, less code will work:

builder.UseDefaultFiles(new DefaultFilesOptions{    DefaultFileNames = Enumerable.Repeat("index.html", 1).ToList()});

It should be called before builder.UseStaticFiles for whatever reason.

Version of Microsoft.Owin.StaticFiles is 3.0.1