自托管asp核心 - 角度2站点,OWIN作为控制台应用程序

时间:2017-11-22 23:53:54

标签: .net angular asp.net-core owin asp.net-core-mvc-2.0

我用ASP net core 2和angular构建了一个Angular项目,我一直试图在OWIN中托管它无济于事。我使用VS publish来生成要发布的文件,这些文件在Visual Studio中直接在IIS express中运行时可以正常工作。

这是发布文件夹的文件结构:

MainDirectory
    wwwroot
       dist
       favicon

我已经在.NET(Visual Studio)中设置了一个发布项目,并且在我的startup.cs类中有以下内容,但是当我在启动服务后浏览到url时,页面中没有任何内容:我在下面使用了以下代码

const string rootFolder = "C:\\src\\StartupService\\maindirectory";
            var fileSystem = new PhysicalFileSystem(rootFolder);
            var options = new FileServerOptions
            {
                EnableDefaultFiles = true,
                FileSystem = fileSystem
            };

            app.UseFileServer(options);

我想提一下,我使用C#中的app.UseWelcome()页面测试了OWIN自主服务器,它很好,但它不能为我的角网站提供服务。只是提到我在任何地方都没有看到发布文件夹中的任何html文件,只有DLL,JSON文件和web.config,所以我不知道这是不是一个问题。

我也试过这段代码,但它也没有用。

var physicalFileSystem = new PhysicalFileSystem("C:\\src\\StartupService\\maindirectory");
            var options = new FileServerOptions
            {
                EnableDefaultFiles = true,
                FileSystem = physicalFileSystem,
                StaticFileOptions =
                {
                    FileSystem = physicalFileSystem,
                    ServeUnknownFileTypes = true
                },
                // DefaultFilesOptions = {DefaultFileNames = new[] {"index.html"}}
            };
            app.UseFileServer(options);

知道如何在OWIN中自我托管使用VS2017创建的Angular 2吗?

1 个答案:

答案 0 :(得分:1)

尝试传递相对路径,例如@"。\ Public"到PhysicalFileSystem对象。

这是一个扩展助手;

 public static class FileServerConfig
    {
        internal static void ServeFiles(this IAppBuilder app, string path = @".\Public")
        {
            try
            {
                var fileServerOptions = new FileServerOptions()
                {
                    EnableDefaultFiles = true,
                    EnableDirectoryBrowsing = false,
                    RequestPath = new PathString(string.Empty),
                    FileSystem = new PhysicalFileSystem(path)
                };

                fileServerOptions.StaticFileOptions.ServeUnknownFileTypes = true;

                app.UseFileServer(fileServerOptions);
            }
            catch (System.Exception)
            {
                // Serilog.Log.Fatal("Cannot locate Public folder"); // Logging
            }
        }
    }

将以上代码添加到应用中的新类,然后在Startup.cs中执行以下操作:

app.ServeFiles();

app.ServeFiles(@".\customPath");

也;一定要将Owin处理程序添加到web.config

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