如何为Katana/Owin自托管应用设置默认静态网页?

wil*_*lee 16 asp.net self-hosting owin katana

我使用Owin自托管控制台应用程序建立了一个网站.我正在提供静态文件没有问题,网站静态部分的"根"正常工作,并且Web API路由也正常工作.

如果我浏览到:

http://localhost/index.html
Run Code Online (Sandbox Code Playgroud)

它呈现了我所期望的一切.但我还没弄清楚如何设置它以便浏览:

http://localhost
Run Code Online (Sandbox Code Playgroud)

提供index.html(作为默认视图).这是在IIS风格的网站下工作.如何使其与Owin自我主机一起使用?

Sam*_*bes 21

fra的答案的更详细版本:

1- NuGet安装Microsoft.Owin.StaticFiles(我假设你已经通过NuGet安装了Microsoft.AspNet.WebApi.OwinSelfHost)

2-在解决方案中创建一个目录(在Visual Studio中),并将所有客户端文件放入其中,例如

+Web

--+images

--+pages

------page1

------page2

--+scripts

--+css

---index.html
Run Code Online (Sandbox Code Playgroud)

注意:有一个根目录(web)包含所有其他目录,并且根目录下的index.html.

3-现在,在包含web api路由配置的同一个类中,添加以下代码:

var physicalFileSystem = new PhysicalFileSystem(@".\Web"); //. = root, Web = your physical directory that contains all other static content, see prev step
var 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);
Run Code Online (Sandbox Code Playgroud)

4- prev代码工作的另一个步骤:确保将Copy to output directoryWeb目录中的所有文件的属性(以及所有嵌套目录)设置为Copy Always[select the file | 按F4,或右键单击属性| 去Copy to output directory]

就这样 :)


fra*_*fra 19

我是这样做的:

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);
Run Code Online (Sandbox Code Playgroud)

  • @Eddie通过将"复制到输出目录"属性设置为"始终复制"或"复制更新"来确保html文件位于构建位置,从而将上述内容耦合在一起.如果找不到文件,你不会得到异常是一种耻辱! (4认同)

the*_*ric 7

也许这是一个迟到的答案,但如果您只需要一个默认文档,那么代码将会更少:

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

builder.UseStaticFiles无论出于何种原因,都应该先调用它.

版本Microsoft.Owin.StaticFiles是3.0.1