我用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吗?
答案 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>